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