GH GambleHub

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’.

REST misoli:

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`
Sifat (oflayn):
  • NDCG @k, MAP, MRR, Recall @k, Precision @k belgilangan tanlovlarda.
Onlayn:
  • 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.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.