Filtrlash va toʻliq matn qidirish
1) Qidiruv qatlami nima uchun kerak?
Filtrlash va toʻliq matnli qidirish (FTS) faqat birlamchi kalitlar boʻyicha emas, balki «maʼnosi boʻyicha» maʼlumotlarga tezkor kirishni taʼminlaydi. Toʻgʻri ishlab chiqilgan qidiruv qatlami quyidagilarni birlashtiradi:- Qat’iy filtrlar (toifalar, sanalar, narxlar, foydalanish huquqlari)
- To’liq matn (leksik match va reyting)
- Fasetlar (navigatsiya uchun agregatlar)
- Gibrid tartiblash (BM25/TF-IDF + vektor embeddingi)
- Ishonchli protokollar (kursorlar tomonidan paginatsiya, TTL tokenlari, kross-sharding)
2) Me’moriy rasm
Komponentlar:1. Ingest/ETL → normallashtirish, deduplikatsiya, boyitish, indeks uchun maydonlar qurish.
2. Indeksator → teskari indeks (leksemalar → hujjatlar), ustunli tuzilmalar, vektor indeksi (HNSW/IVF-PQ).
3. Query Layer → soʻrovlar parseri, filtrlar/kirish huquqlarini qoʻllash, shardlarni rejalashtirish, k-way merge.
4. Ranker → BM25 + (ops.) LTR/Neural re-rank.
5. Serving → kesh, kursorlar, fasetlar, haylatlar, avtokompletlar.
6. Kuzatish → latentlik metrikasi, sifat, A/B-eksperimentlar.
3) Ma’lumotlar va indeks modeli
3. 1 Maydonlar va analizatorlar
Tiplar: keyword (tekis mos kelish), text (tahlil qilinadi), numeric/date/geo, vector.
Analizatorlar: tokenizatsiya, normallashtirish (lowercase, Unicode NFKC), filtrlar (stop-so’zlar, stemming/lemmatizatsiya).
Ko’p tillilik: per-field analizatorlar (ru, uk, en); ICU-tahlil; transliteratsiya; diakritikani hisobga olish.
3. 2 Teskari indeks (sparse)
Tuzilishi: term → posting list (docID, term freq, pozitsiyalar).
Ranglash: dala bustli BM25 (yoki klassik TF-IDF).
3. 3 Vektor indeksi (dense)
Matnning embeddingi (masalan, 384-1024-o’lchovli).
ANN tuzilmalari: HNSW, IVF-PQ, Flat (kichik toʻplamlar uchun).
Kosinus yaqinligi/inner product; BM25 bilan kalibrlash (gibrid).
3. 4 Fasetlar va agregatlar
Tezkor count-lar uchun prekompyut/ustunli saqlash.
Ierarxik fasetlar (toifasi/kichik toifasi).
Diapazonlar (narx bini, sanalar).
4) So’rovlar: filtrlar + to’liq matn + saralash
4. 1 API (REST) kontraktlari
Soʻrov:
GET /v1/search? q = classic slots & limit = 20 & cursor =... & sort = score: desc, created _ at: desc
&filters=brand:("NetEnt","EGT"); price:[10 TO 50];published_at:[2024-01-01 TO ]
&facets=brand,year,price:range(0,10,20,50,100)
Javob (parcha):
json
{
"items": [ { "id":"...", "title":"...", "score": 12. 3, "highlight": { "content": ["..."] } } ],
"facets": { "brand": [{"value":"NetEnt","count":123},...] },
"page": { "limit":20, "has_more":true, "next_cursor":"opaque-token" }
}
4. 2 GraphQL (soddalashtirilgan)
graphql type Query {
search(query: String!, filter: SearchFilter, first: Int, after: String, sort: [Sort!]): SearchConnection!
}
4. 3 gRPC
proto message SearchRequest {
string query = 1;
map<string,string> filters = 2;
int32 page_size = 3;
string page_token = 4; // курсор repeated string facets = 5;
}
5) Tabiiy tilni qayta ishlash (NLP)
Tokenlash/normallashtirish: Unicode-xavfsiz, defis/apostroflarni hisobga olish.
To’xtash so’zlari: tillar bo’yicha sozlash ro’yxatlari.
Stemming vs lemmatizatsiya: ru/uk uchun lemmatizatsiya yaxshiroqdir (sifat> tezlik).
Sinonimlar: ikki yo’nalishli/yo’naltirilgan lug’atlar; TTL lugʻatlari versiyasi.
Xatolar (fuzzy): Damerau-Levenshtein masofa chegarasi va aniq mos kelish bustlari bilan.
N-gramlar/edge-ngrams: avtokomplet va maslahatlar uchun.
Transliteratsiya: «shch», «kiev/kyiv» - muvofiqlik qoidalari.
6) Relevantlik va reytinglash
6. 1 Bazaviy leksik skoring
BM25’k1’,’b’ni moslash.
Boʻshliqlar (title ^ 3, tags ^ 1. 5, body^1).
Yangiligi:’score + = freshness_boost (decay (created_at))’.
6. 2 Xulq-atvor signallari
Click-through rate, dwell time, tanlanganlarga saqlash (anti-pozitsion bayas bilan).
Deduplikatsiya: hujjatlarni ~ bir xil tarkibga (MinHash/SimHash) yopishtirish.
6. 3 Learning-to-Rank (LTR)
Fichlar: dalalar bo’yicha BM25, uzunligi, yangiligi, mashhurligi, ibora bo’yicha mos kelishi, pozitsion tezligi.
Modellar: LambdaMART/XGBoost; NDCG @k, MAP, Precision @k oflayn metrikalari; onlayn A/B
6. 4 Neyro-qayta anglash
Ikki bosqichli: recall (BM25/ANN) → top-N (masalan, 200) → cross-encoder rerank.
Qiymatni hisobga olish: taym-budjet, yuklamada neyro-bosqichsiz fallback.
6. 5 Gibrid qidiruv (sparse + dense)
Yo fusion (tezlikni normallashtirish va summa) yoki multi-stage (dense rerank sifatida).
Kalibrlash muhim: min-max/z-score/quantile mapping.
7) Filtrlash, fasetlar va kirish
7. 1 Filterlar
Operatorlar:’=’,’IN’, diapazonlar, prefikslar, geo-bounding box/geo-distance.
Kombinatsiyalar:’AND’filtrlar boʻyicha,’OR’koʻp qiymatlar ichida (brand IN...).
Namunaviy xavfsizlik: son maydonlari matn sifatida tahlil qilinmaydi.
7. 2 Fasetlar
Boshlang’ich tuzilmalar bo’yicha arzon count-lar.
«Qoʻllanilgan» fasetlar qolgan variantlarni koʻrsatadi (post-filter faceting).
7. 3 Kirish/ko’p tenantlik
Xavfsizlik filtrlari saralash (pre-filter) gacha integratsiyalashadi.
Hujjatdagi ABAC/RBAC maydonlari (’tenant _ id’,’visibility’,’acl’).
So’rov tokeni imzolandi; ko’p tenantda - avtomatik’tenant _ id’filtri.
8) Paginatsiya, kursorlar va konsistentlik
Vaqt boʻyicha saralashda’(score, tie-breaker) yoki’(created_at, id)’boʻyicha seek-kursor paginatsiyasi.
Noaniq’page _ token’c HMAC va TTL.
Indeksning konsistentligi: near-real-time (NRT): kechikish 0. 5-2 yozuv va ko’rinish o’rtasida. Buni SLA bilan hujjatlashtiring.
Kross-shard: lokal qidiruv → k-way merge global tartib boʻyicha, tokendagi per-shard kursorlari.
9) Avtoto’ldirish va maslahatlar
Suggesters: prefix-trie / edge-ngrams по полю `title`.
Popular queries: log kliklash → mashhurlik bo’yicha maslahatlar + shaxsiylashtirish (segmentlar).
Spell-as-you-type: masofa chegarasi bilan tezkor fuzzy-qidirish’<= 1’.
GET /v1/suggest? q=kaz&limit=8&locale=ru
→ ["casino," "casual games,..."]
10) Haylaytlar va snippetlar
Pozitsion indeks → mos keluvchi iboralarni ajratib olish.
HTML ekranlash, uzunlik chegarasi, qoʻshni parchalarni birlashtirish.
Relevant atamalarning zichligi bo’yicha snippetlarni saralash.
11) Unumdorlik, kesh va SLO
Indekslar: xotiradagi issiq segmentlar; kompressiya postings; doc values fasetlar uchun.
Kesh: L1 (jarayon), L2 (Redis), faset/agregat keshlari; indeks versiyasiga ko’ra nogironlikka olish.
SLO: P95 <150-200 ms q’k <= 20’, P99 <500 ms; foydalanish imkoniyati 99. 9%.
Backpressure:’k’ning kamayishi, ortiqcha yuklashda neyro-bosqichning uzilishi.
Rate limiting API/foydalanuvchi/tenant kalitiga.
12) Kuzatuvchanlik va sifat metrikasi
Texnometrika:- `search_latency_ms` (P50/P95/P99), `qps`, `timeouts`, `error_rate`
- `cache_hit_ratio`, `facet_cache_hit`, `rerank_share`
- `shard_fanout`, `merge_time_ms`, `ann_recall@k`
- NDCG @k, MAP, MRR, Recall @k, Precision @k belgilangan tanlovlarda.
- CTR@k, sCTR (satisfied clicks), dwell time, отказ (pogostick rate).
A/B: «guardrail» metrikasini (yashirin, xato) + maqsadli (NDCG proxy) belgilang.
13) Test sinovi
Relevance unit tests: asosiy so’rovlar bo’yicha kutilayotgan o’yinlarni tekshirish.
Property-based: xatolarga/sinonimlarga/tillarga chidamlilik.
Paginatsiya: sahifalar chegarasida dublikatlar yo’qligi (seek-kontraktlar).
Xavfsizlik: Kirish filtrlari har doim qoʻllaniladi (hatto faset-count).
Lug’atlar regressi: sinonimlar va fuzzy-qoidalarni versiyalash.
14) Xavfsizlik va maxfiylik
PII boʻlgan maydonlarni text sifatida indekslamang; alohida saqlash/shifrlash.
Saqlanayotgan asl matnlarni minimallashtirish (store = false, faqat snippet maydonlari).
Query privacy: xom soʻrovlarni PII bilan izohlamang; anonimlashtirish/xeshlash.
Ko’p tenant: indekslarni qat’iy izolyatsiya qilish yoki majburiy’tenant _ id’filtri.
15) Migratsiya va muvofiqlik
Indeks sxemasini (v1 → v2) ikki marta yozish va bosqichma-bosqich almashtirish bilan versiya qilish.
Analizatorlarning mosligi: eski zanjirlarni indeksni oʻzgartirmaguncha ushlab turing.
’version’,’activated _ at’, rollback soʻzlarini almashtirish.
16) Amaliy retseptlar
16. 1 Klassik leksik qidiruv (BM25)
Maydonlar:’title ^ 3’,’tags ^ 2’,’body ^ 1’.
Analizatorlar: til-o’ziga xos + lemmatizatsiya.
Qisqa soʻrovlar uchun fuzzy (’<= 3’tokenlar),’fuzziness = 1’.
16. 2 Gibrid sparse + dense
1. So’rov embeddingi bo’yicha ANN-qidiruv (k = 200)
2. Top-200 bilan birlashtirish BM25
3. Kalibrlash va quyish (Reciprocal Rank Fusion)
4. Top-N (N = 20), ixtiyoriy ravishda - rerank cross-encoder-omni oling.
16. 3 Katalogning faset navigatsiyasi
Huquqlar/tenant boʻyicha qattiq pre-filter
Post-filtrli fasetlar (aktiv filtrlarni hisobga olgan holda counts)
Saralash: relevantlik yoki biznes-maydon bo’yicha (narx/yangilik)
17) So’rovlar namunalari (psevdo-DSL)
Filterlar va saralash:json
{
"query": "live casino,"
"filters": {
"country": ["EE","LV","LT"],
"license": ["MGA","UKGC"],
"launched_at": {"gte": "2023-01-01"}
},
"sort": ["_score:desc","launched_at:desc"],
"facets": ["country","license"],
"page": {"limit": 20, "cursor": "opaque"}
}
Geopoisk:
json
{
"query": "casino",
"geo": {"lat": 59. 437, "lon": 24. 753, "radius_km": 50}
}
Avtokompit:
json
{ "prefix": "evo", "field": "brand_suggest", "limit": 8 }
18) UX-patternlar
Aktiv filtr chiplari + «hamma narsani tashlash».
Boʻsh natijalar: «urinib koʻring» (sinonimlar, filtrni olib tashlash).
«Nolga oid maslahatlar»: ommabop soʻrovlar/toifalar.
Kursor bilan paginatsiya («Yana» tugmasi) va cheksiz skroll; qo’llanilgan filtrlarning qat’iy belgilangan indikatori.
Alohida almashtirgichlar «xatolarni hisobga olish», «iboraning aniq mos kelishi».
19) Tez-tez xatolar va anti-patternlar
→ Dubli/poygalarni saralashda tie-breaker yo’qligi.
Aktiv filtrlardan tashqari fasetlar → «soxta» counts.
Ranglashdan keyin foydalanish uchun filtrlarni qoʻllash.
Turli tillarni bitta analizator bilan aralashtirish.
Seek-kursor o’rniga OFFSET/LIMIT chuqur paginatsiyasi.
Cheksiz fuzzy → yashirin portlash.
20) Joriy etish cheki
1. Maydonlarni va ularning turlarini aniqlab, per-locale analizatorlarini belgilang.
2. Teskari indeksni + (ops.) vektorli ANN.
3. Soʻrovlar va xavfsiz kirish filtrlarini (pre-filter) amalga oshiring.
4. BM25 va dala kuchaytirgichlarini moslash; fasetlarni ulang.
5. Shardlar boʻyicha kursorlarni (opaque, HMAC, TTL) va k-way merge kiriting.
6. Avtokomplatlar, hiylalar, xavfsiz ekranlarni qoʻshing.
7. Metriklar: latentlik, NDCG @k, CTR; L1/L2 kesh.
8. A/B-relevantlik tyuningi uchun freymvork.
9. SLAni hujjatlashtiring: NRT kechikishi, limit limitlari, konsistentlik kafolati.
10. Migratsiya rejasi: indeks, lug’atlar va tahlilchilarning versiyalari.
Filtrlash va to’liq matnli qidirishning yaxshi loyihalashtirilgan qatlami nafaqat tezkor indeks, balki kursorlar, xavfsizlik, oldindan aytib bo’ladigan UX va o’lchanadigan ahamiyatlilik bilan aniq protokol shartnomasidir. Bunday yondashuv minglab va milliardlab hujjatlarni qamrab oladi va klassik leksik qidiruv va zamonaviy gibrid stsenariylarni qo’llab-quvvatlaydi.