GH GambleHub

Texnologiyalar va infratuzilma → Elasticsearch va to’liq matnli qidiruv

Elasticsearch va toʻliq matn qidirish

1) Elasticsearch roli

Elasticsearch (ES) - agregatsiyalar uchun invertatsiya qilingan indekslar va ustunli tuzilmalar negizida taqsimlangan qidiruv va tahlil tizimi. U quyidagilarni beradi:
  • To’liq matn: ahamiyatlilik (BM25), morfologiya, fuzzy/typo tolerant.
  • Fasetlar va agregatsiyalar: atributlar bo’yicha tezkor kesishlar.
  • Gibrid qidirish: BM25 + vektor kNN (semantika).
  • Ishlab chiqish tezligi: Query DSL, ingest pipelines, boy ekotizim.

iGaming/fintech uchun: o’yinlar/provayderlar, promo va qoidalarni qidirish, tez javob beradigan fasetlar (provayder, o’zgaruvchanlik, RTP, til), KYC/AML jurnallarini qidirish, loglar va alertlarni tahlil qilish.


2) Ma’lumotlar modeli va mappinglar

2. 1 Indeks va maydon turlari

’text’ (tahlil qilinadigan maydon) - to’liq matn uchun.
’keyword’ - aniq qiymatlar/agregatsiyalar/saralash.
`date`, `long/double`, `boolean`, `ip`, `geo_point`.
’nested’ - maydonlarning to’g "ri korrelyatsiyasiga ega bo’lgan obyektlar massivlari.
’dense _ vector’ - vektorli taqdimotlar (embeddinglar).

2. 2 Multipol strategiyasi

Maydonni bir nechta turda saqlang:’name. text’(tahlil qilinadigan),’name. raw` (keyword), `name. ngram’(avto to’ldirish uchun).

json
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "ru_morph",
"fields": {
"raw": { "type": "keyword", "ignore_above": 256 },
"ngram": { "type": "text", "analyzer": "edge_ngram_2_20" }
}
},
"provider": { "type": "keyword" },
"tags":   { "type": "keyword" },
"rtp":   { "type": "float" },
"released_at": { "type": "date" },
"lang":   { "type": "keyword" },
"embedding": { "type": "dense_vector", "dims": 384, "index": true, "similarity": "cosine" }
}
},
"settings": {
"analysis": {
"filter": {
"ru_stop": { "type": "stop", "stopwords": "_russian_" },
"ru_stemmer": { "type": "stemmer", "language": "russian" },
"syn_ru": { "type": "synonym", "lenient": true, "synonyms": [
"слот,игровой автомат => слот",
"джекпот,суперприз => джекпот"
] }
},
"analyzer": {
"ru_morph": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "ru_stop", "ru_stemmer", "syn_ru"]
},
"edge_ngram_2_20": {
"type": "custom",
"tokenizer": "edge_ngram",
"filter": ["lowercase"],
"char_filter": [],
"tokenizer": "edge_ngram"
}
},
"tokenizer": {
"edge_ngram": { "type": "edge_ngram", "min_gram": 2, "max_gram": 20 }
}
}
}
}

2. Fasetlar uchun 3 Nested

’features’ turining atributlari: [{name, value}]’nested’ni bezang, aks holda fasetlar notoʻgʻri mos keladi.


3) Relevantlik: BM25, bust va duragay

3. 1 Klassika (BM25)

Maydonlarni tarozilar bilan birlashtiring (title ^ 4, tags ^ 2, description).
Shovqinli tasodiflarni nazorat qilish uchun’minimum _ should _ match’dan foydalaning.

3. 2 Vektorlar (kNN) + BM25 (rerank)

Embeddingi (masalan, 384-768) v’dense _ vector’.
Avval vektor bo’yicha kNN (top 200-500), so’ngra rescore BM25 + biznes-bustlar (yangilik, RTP, mintaqa litsenziyasi).

Gibrid soʻrov namunasi:
json
{
"knn": {
"field": "embedding",
"query_vector": [/... /],
"k": 400, "num_candidates": 2000
},
"query": {
"bool": {
"should": [
{ "multi_match": {
"query": "египетские слоты джекпот",
"fields": ["title^4","tags^2","description"],
"type": "best_fields",
"minimum_should_match": "60%"
}}
],
"filter": [
{ "term": { "region": "TR" }},
{ "range": { "rtp": { "gte": 94.0 }}}
]
}
},
"rescore": {
"window_size": 400,
"query": {
"rescore_query": {
"function_score": {
"query": { "match_all": {} },
"boost_mode": "sum",
"functions": [
{ "gauss": { "released_at": { "scale": "180d", "offset": "30d", "decay": 0.5 } } },
{ "field_value_factor": { "field": "popularity", "factor": 0.2, "modifier": "log1p" } }
]
}
}
}
},
"highlight": { "fields": { "title": {}, "description": {} } }
}

4) Avtoto’ldirish va maslahatlar

Yondashuvlar:
  • Edge N-gram tagida’title. ngram’(tez, oddiy).
  • Completion suggesters (’completion’maydoni) - tezkor maslahatlar, lekin alohida indeksatsiya usuli.
  • Search-as-you-type - so’z va so’z birikmalarini boshlash uchun tokenizatsiyani birlashtiradi.
Maslahatlar misoli:
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}

5) Sinonimlar, xatolar va ko’p tillilik

Sinonimlar:’synonym’filteri orqali fayl/roʻyxatni yuklab oling; domenlarni ajrating.
Xatolar:’fuzziness: AUTO’v’multi _ match’, uzunligi va maydonlari bilan cheklang. Maslahatlar uchun -’fuzzy’completion.

Koʻp tillilik:
  • Indeks-per-lokal (ru/en/tr/pt-BR) yoki ko’p analizatorli sxema:’title _ ru’,’title _ en’.
  • Разные analyzers: `russian`, `english`, `turkish`, `portuguese`.
  • «Issiq» lokallarni foydalanuvchiga yaqinlashtirish uchun tilni routing kalitiga oʻtkazing.

6) Filtrlar, fasetlar va agregatsiyalar

Fasetlar uchun’keyword’va’nested’agregatsiyalaridan foydalaning.
Agregatsiyalarda kardinal maydonlardan (noyob ID) qoching -’runtime fields’yoki dastlabki vitrinalarni chiqaring.

Fasetlar misoli:
json
{
"size": 20,
"aggs": {
"by_provider": { "terms": { "field": "provider", "size": 20 } },
"by_volatility": { "terms": { "field": "volatility" } },
"rtp_hist": { "histogram": { "field": "rtp", "interval": 1 } }
}
}

7) Ma’lumotlarni kiritish va matnni tozalash

Ingest pipelines: normallashtirish, maydonlarni ajratib olish, geo-enkoding, HTMLni olib tashlash.
Attachment/ingest-ocr (zarurat bo’lganda): PDF/rasmlarni indekslash (PIIga diqqat bilan).
Lemmatizatsiya: analizatorlar yoki tashqi payplaynlar (precompute tokenlar) orqali.


8) Shardlar, replikalar va ILM

8. 1 O’lchamlari va sharding

Kamroq shard yaxshiroqdir. Maqsad: aralash yuklamalar uchun har bir shardga 10-50 GB.
’number _ of _ shards: 1-3’ bilan boshlang. Replikalar - ishlab chiqarishda kamida 1 ta.

8. 2 ILM (Lifecycle)

hot → warm → cold → delete uchun loglar/tarix promo.
«Sovuq» segmentlar uchun siqish (force merge).
Kataloglar va mahsulot qidirish uchun - vaqti-vaqti bilan optimallashtiriladigan «cheksiz» hot.

8. 3 Downtaymsiz migratsiya algoritmi

Yangi’games _ v2’→ alias’games’indeksi’reindex’va’backfill’dan keyin oʻzgaradi. Deprecated dalalar - asta-sekin tozalang.


9) Snapshotlar, DR va yangilanishlar

Snapshots obyekt omboriga (S3/GCS), jadval va tiklanishni tekshirish.
Rolling-yangilanishlar nod, tekshirish shard allocation awareness (zonalar bo’yicha).
DR rejalari: kritik indekslar (maʼlumotnomalar, kataloglar) uchun cross-region replikatsiyasi (CCR).


10) Xavfsizlik va PII

Mijoz va klaster oʻrtasida TLS/mTLS.
RBAC: indeks/operatsiya rollari; Dev/Stage/Prod - alohida.
PII/PCI: keraksiz shaxsiy maʼlumotlar bilan maydonlarni indekslamang; ingest-maskalashdan foydalaning.
Right to be forgotten: Hujjatlarni olib tashlash uchun user_id saqlang; soft-delete + reindex/anonalizatsiya.


11) Kuzatuv va qidiruv SLO

Metriklar:
  • P50/P95/P99 latency query, xato 4xx/5xx.
  • Cache hit (query cache / shard request cache).
  • Heap usage, GC паузы, segment merges, threadpools (search/write).
  • Hot shards/hot nodes, rejections.
  • KNN: `graph_hits`, `search_k`, latency, recall@k.
SLO-misollar:
  • Oʻyinlarni qidirish: P95 ≤ 200 ms, xato <0. 30-daqiqada 5%.
  • Maslahatlar: P95 ≤ 80 ms.
  • KNN gibrid: top-20 natijalar uchun P95 ≤ 350 ms.

12) FinOps: qiymati va unumdorligi

Indeks oʻlchami: tokenizatsiyadan tejang, keraksiz’fielddata’ni oʻchiring,’doc _ values’ni faqat kerakli joyda ishlating.
Segmentlar: merge siyosatini rejalashtiring, «maydalanishga» yo’l qo’ymang.
KNN RAM/CPU uchun qimmatroq: dims,’num _ candidates’, BM25 uchun pre-filter.
RAMdagi issiq maydonlar: field data/heap; «og’ir» agregatsiyalarni alohida indekslarga olib boring.


13) So’rovlar namunalari

13. 1 Bustli to’liq matnli multipol

json
{
"query": {
"multi_match": {
"query": "book of",
"fields": ["title^4","title.ngram^2","tags^2","description"]
}
},
"sort": ["_score", { "released_at": "desc" }]
}

13. 2 Filtrlar + fasetlar

json
{
"query": {
"bool": {
"must": [{ "match": { "title": "египет" }}],
"filter": [
{ "terms": { "provider": ["Novomatic","PragmaticPlay"]}},
{ "range": { "rtp": { "gte": 95 }}}
]
}
},
"aggs": {
"by_provider": { "terms": { "field": "provider" } },
"by_year": { "date_histogram": { "field": "released_at", "calendar_interval": "year" } }
}
}

13. 3 Nested atributlarni filtrlash

json
{
"query": {
"nested": {
"path": "features",
"query": { "bool": {
"must": [
{ "term": { "features.name": "volatility" }},
{ "term": { "features.value": "high" }}
]
}}
}
}
}

13. 4 Loglar boʻyicha qidirish (ECS)

json
{
"query": {
"bool": {
"must": [{ "match_phrase": { "message": "payment declined" }}],
"filter": [
{ "term": { "service.name": "payments" }},
{ "range": { "@timestamp": { "gte": "now-1h" }}}
]
}
},
"highlight": { "fields": { "message": { "number_of_fragments": 0 } } }
}

14) Multi-tenant va izolyatsiya

Tenant uchun indeks (yaxshiroq) yoki’tenant _ id’+ filter ACL (agregatsiyalarda qimmatroq).
Shardlarni lokalizatsiya qilish uchun routing’tenant _ id’.
Tenant soʻrovlarini limit/taymaut bilan cheklang,’query. phase` guard-rails.


15) Joriy etish chek-varaqasi

1. Sxema:’text/keyword/nested’+ multipol,’dense _ vector’.
2. Analizatorlar per-til, sinonimlar, avtomatik toʻldirish uchun edge-ngram.
3. Relevantlik: BM25 kuchaytirgichlar + gibrid kNN → rescore.
4. Fasetlar: keyword/nested, agregatsiyalar faqat «sog’lom» maydonlar bo’yicha.
5. Indeksatsiya: ingest pipelines (normallashtirish), batch-yuklash.
6. Chardlash: kichik, ko’chish uchun alias, «uzun» loglar uchun ILM dan boshlang.
7. DR: snapshots jadvali, tiklanishni tekshirish, kritik indekslar uchun CCR.
8. Xavfsizlik: TLS, RBAC, PII niqoblash, olib tashlash siyosati.
9. Kuzatish darajasi: latency, heap/GC, cache hit, hot shards, rejections.
10. FinOps: indeks oʻlchami, kNN parametrlash, ortiqcha’doc _ values/fielddata’oʻchirish.


16) Anti-patternlar

Bitta hamma uchun indeks: turli domenlar (katalog, loglar, tranzaktsiyalar) turli sozlamalarni talab qiladi.
O’ylamasdan’fuzziness: AUTO’barcha sohalarda → sekin va shovqin.
«Ma’noni yeydi» sinonimlari: lug’at domenlarini ajratmaslik.
Dala bog’lamalari kerak bo’lganda nested bo’lmaydi → soxta fasetlar.
Juda ko’p shardlar (har bir hujjatga bittadan) - cluster state uchun qo’shimcha xarajatlar.
Ko’chib o’tishda alias’dan foydalanmaslik - to’xtab qolish va «singan» havolalar.
PII indeksatsiyasi - tartibga solish xavfi va qimmatbaho reindeks.


17) iGaming/fintech konteksti: tezkor retseptlar

Qidirish:’multi _ match’bilan’title ^ 4’,’tags ^ 2’, provayder/o’zgaruvchanlik bo’yicha fasetlar, mintaqa/valyuta bo’yicha filtrlar, «mavzu» uchun vektorli gibrid (masalan, «Misr», «fruit classic»).
Promo/bonuslar: sinonimlar («frispins», «free spins»), data-filtrlar’active _ from/active _ to’, completion orqali maslahatlar.
KYC/AML jurnallari: ECS sxemasi,’message’bo’yicha to’liq matn,’rule _ name’,’country’bo’yicha agregatsiyalar,’@timestamp’gistogramma bo’yicha anomaliyalar.
Provayderlar ma’lumotnomasi: fasetlar va saralash uchun keyword maydonlari; matnli tavsiflar - morfologiya bilan’text’.
Tartibga soluvchi sahifalar: multi-tilli maydonlar, yumshoq maslahatlar uchun’search _ as _ you _ type’.


Jami

Elasticsearch’da samarali izlash nafaqat «BM25 ni yoqish»: bu to’g’ri analizatorlar va mappinglar, multipollar va nested, gibrid VM25 + vektorlar, toza fasetlar va agregatsiyalar, chardlash va ILM intizomi, aniq SLO va kuzatish, shuningdek xavfsizlik va Fin Ops. Ushbu printsiplar bilan sizning qidiruvingiz tez, ahamiyatli va oldindan aytib bo’ladigan bo’ladi - va oziq-ovqat platformasi trafigining cho’qqilariga bardosh beradi.

Contact

Biz bilan bog‘laning

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

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.