Tehnologiýalar we infrastruktura → Elasticsearch we doly tekst gözlemek
Elasticsearch we doly tekst gözlemek
1) Elasticsearch roly
Elasticsearch (ES) - agregasiýa üçin öwrülen indeksler we sütün gurluşlary esasynda paýlanan gözleg we seljeriş ulgamy. Ol:- Doly söz: degişli (BM25), morfologiýa, fuzzy/typo tolerant.
- Fasetler we agregasiýalar: atributlar boýunça çalt kesişler.
- Gibrid gözleg: BM25 + wektor kNN (semantika).
- Ösüş tizligi: Query DSL, ingest pipelines, baý ekosistema.
iGaming/fintech üçin: oýunlary/üpjün edijileri, mahabatlary we düzgünleri gözlemek, çalt jogap berýän fasetler (üpjün ediji, üýtgewsizlik, RTP, dil), KYC/AML magazinesurnallary boýunça gözlemek, bloglary we alertleri seljermek.
2) Maglumatlaryň we mappingleriň nusgasy
2. 1 Indeks we meýdan görnüşleri
'text' (analiz edilýän meýdan) - doly söz üçin.
'keyword' - takyk bahalary/agregasiýalary/sortlamak.
`date`, `long/double`, `boolean`, `ip`, `geo_point`.
'nested' - meýdanlary dogry baglanyşdyrylan obýektleriň massiwleri.
'dense _ vector' - wektor görkezmeleri (embeddingler).
2. 2 Multipol strategiýasy
Meýdany birnäçe görnüşde saklaň: 'name. text '(derňelýän),' name. raw` (keyword), `name. ngram '(awtomatiki doldurmak üçin).
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. 3 Fasetler üçin nested
Görnüşiň atributlary 'features: [{name, value}]' nested '-i düzüň, ýogsam fasetler ýalan gabat geler.
3) Degişli: BM25, boost we gibrid
3. 1 Nusgawy (BM25)
Meýdanlary tereziler bilen birleşdiriň (title ^ 4, tags ^ 2, description).
Şowhunly gabat gelýänlere gözegçilik etmek üçin 'minimum _ should _ match' ulanyň.
3. 2 Wektorlar (kNN) + BM25 (rerank)
Embeddingler (mysal üçin 384-768) 'dense _ vector' -da.
Ilki wektor boýunça kNN (top 200-500), soňra rescore BM25 + business busters (täzelik, RTP, sebitiň ygtyýarnamasy).
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) Awtomatiki doldurma we maslahatlar
Çemeleşmeler:- Edge N-gram 'title. ngram '(çalt, ýönekeý).
- Completion suggesters ('completion' meýdany) - çalt maslahatlar, ýöne aýratyn indeksasiýa ýoly.
- Search-as-you-type - sözüň we söz düzüminiň başlangyjy üçin tokenizasiýany birleşdirýär.
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}
5) Sinonimler, ýalňyşlyklar we köp dillilik
Sinonimler: 'synonym' süzgeç arkaly faýly/sanawy göçürip alyň; domenleri bölüň (kazino/sport).
Ýalňyşlyklar: 'fuzziness: AUTO' v 'multi _ match', uzynlygy we meýdany bilen çäklendiriň. Maslahatlar üçin - 'fuzzy' completion.
- Indeks-per-lokal (ru/en/tr/pt-BR) ýa-da köp analizatorly shema: 'title _ ru', 'title _ en'.
- Разные analyzers: `russian`, `english`, `turkish`, `portuguese`.
- "Gyzgyn" lokallary ulanyja has ýakyn saklamak üçin dili marşrut açaryna geçiriň.
6) Süzgüçler, fasetler we agregasiýalar
Fasetler üçin 'keyword' we 'nested' agregasiýalaryny ulanyň.
Agregasiýalarda kardinal meýdanlardan (özboluşly şahsyýetnamalardan) gaça duruň - 'runtime fields' ýa-da deslapky penjireleri çykaryň.
json
{
"size": 20,
"aggs": {
"by_provider": { "terms": { "field": "provider", "size": 20 } },
"by_volatility": { "terms": { "field": "volatility" } },
"rtp_hist": { "histogram": { "field": "rtp", "interval": 1 } }
}
}
7) Maglumatlary girizmek we teksti arassalamak
Ingest pipelines: kadalaşmak, meýdanlary çykarmak, geo-encoding, HTML-i aýyrmak.
Attachment/ingest-ocr (zerur): PDF/şekilleri indekslemek (PII-e üns bermek).
Lemmatizasiýa: analizatorlar ýa-da daşarky paýlaýnlar (deslapky bellikler) arkaly.
8) Şarlar, replikalar we ILM
8. 1 Ölçegler we şarding
Az şard - gowy. Maksat: garyşyk ýükler üçin şard üçin 10-50 GB.
'number _ of _ shards: 1-3' -den başlaň, hakykata görä ölçäň. Replikalar - önümde azyndan 1.
8. 2 ILM (Lifecycle)
hot → warm → cold → delete.
"Sowuk" segmentler üçin gysyş (force merge).
Kataloglar we önüm gözlemek üçin - wagtal-wagtal optimizirlenen "näbelli" hot.
8. 3 Downtaýmasyz migrasiýa algoritmi
Täze 'games _ v2' → alias 'games' indeksi 'reindex' we 'backfill' -den soň geçýär. Deprecated meýdanlary - ýuwaş-ýuwaşdan aýyryň.
9) Snapshotlar, DR we täzelenmeler
Obýekt ammaryna snapshots (S3/GCS), tertibi we dikeldiş barlagy.
Rolling-updates nod, check shard allocation awareness (zolaklar boýunça).
DR meýilnamalary: kritiki indeksler (gollanmalar, kataloglar) üçin cross-region replikasiýa (CCR).
10) Howpsuzlyk we PII
Müşderi bilen klaster arasynda TLS/mTLS.
RBAC: indeks/amal rollary; Dev/Stage/Prod - aýratyn.
PII/PCI: gerek bolmasa şahsy maglumatlar bilen meýdanlary indekslemäň; ingest-maskalanmagy ulanyň.
Right to be forgotten: user_id boýunça aýyrmak üçin resminamalara baglanyşyklary saklaň; soft-delete + reindex/anonalization.
11) Synlamak we SLO gözlemek
Metrikler:- P50/P95/P99 latency query, 4xx/5xx ýalňyşlyklary.
- 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ýunlary gözlemek: P95 ≤ 200 ms, ýalňyşlyklar <0. 30 minutlyk penjirede 5%.
- Maslahatlar: P95 ≤ 80 ms.
- KNN gibrid: P95 ≤ top-20 netijeler üçin 350 ms.
12) FinOps: bahasy we öndürijiligi
Indeks ululygy: tokenizasiýa tygşytlaň, 'fielddata' -ny öçüriň, 'doc _ values' -ni diňe gerek ýerinde ulanyň.
Segmentler: merge syýasatyny meýilleşdiriň, "ezilmegine" ýol bermäň.
KNN RAM/CPU boýunça has gymmat: dims, 'num _ candidates', BM25-de pre-filter bilen çäklendiriň.
RAM-daky gyzgyn ýerler: field data/heap; "agyr" agregasiýalary aýratyn indekslere geçiriň.
13) Haýyşnamalaryň mysallary
13. 1 Uly multipol doly tekst
json
{
"query": {
"multi_match": {
"query": "book of",
"fields": ["title^4","title.ngram^2","tags^2","description"]
}
},
"sort": ["_score", { "released_at": "desc" }]
}
13. 2 Süzgüçler + fasetler
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 Atributlary süzmek
json
{
"query": {
"nested": {
"path": "features",
"query": { "bool": {
"must": [
{ "term": { "features.name": "volatility" }},
{ "term": { "features.value": "high" }}
]
}}
}
}
}
13. 4 Highlightly loglar boýunça gözleg (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 we izolýasiýa
Tenant üçin indeks (has gowy) ýa-da 'tenant _ id' meýdany + ACL süzgüç (agregasiýalarda has gymmat).
Routing 'tenant _ id' şarlary lokallaşdyrmak üçin.
Tenantyň soraglaryny çäkler/wagtlar bilen çäklendiriň, 'query. phase` guard-rails.
15) Girizmegiň çek-sanawy
1. Shema: 'text/keyword/nested' + multipol, 'dense _ vector'.
2. Analizatorlar per-dil, sinonimler, edge-ngram awto doldurmak üçin.
3. Degişli: BM25 boost + gibrid kNN → rescore.
4. Fasetler: keyword/nested, agregasiýalar diňe "sagdyn" meýdanlar boýunça.
5. Indeksasiýa: ingest pipelines (kadalaşma), batch-ýüklemek.
6. Şardlamak: kiçiden başlaň, göçmek üçin alias, "uzyn" bloglar üçin ILM.
7. DR: snapshots tertibi, dikeldiş barlagy, möhüm görkezijiler üçin CCR.
8. Howpsuzlyk: TLS, RBAC, PII gizlemek, aýyrmak syýasaty.
9. Syn edilişi: latency, heap/GC, cache hit, hot shards, rejections.
10. FinOps: indeks ululygy, kNN parametrlemek, gereksiz 'doc _ values/fielddata' öçürmek.
16) Anti-patternler
Bir "hemme zat üçin" indeksi: dürli domenler (katalog, loglar, amallar) dürli sazlamalary talap edýär.
Pikirsiz 'fuzziness: AUTO' ähli ugurlarda → haýal we şowhunly.
"Many iýýär" manysy: sözlükleriň domenlerini bölmezlik.
Meýdan baglary gerek bolan ýerlerde nested bolmazdan → ýalan fasetler.
Gaty köp şard (her resminama üçin bir) - cluster state üçin goşmaça çykdajylar.
Göçmek wagtynda alias ulanylmazlygy - iş wagtynyň kesilmegi we "döwülen" baglanyşyklar.
PII indeksasiýasy "bolşy ýaly" - kadalaşdyryjy töwekgelçilikler we gymmat bahaly reindeksler.
17) iGaming/fintech mazmuny: çalt reseptler
Oýunlary gözlemek: 'multi _ match' bilen 'title ^ 4', 'tags ^ 2', üpjün ediji/üýtgewsizlik boýunça fasetler, sebit/walýuta boýunça süzgüçler, "tema" üçin wektorly gibrid (mysal üçin "müsür", "fruit classic").
Mahabat/bonuslar: sinonimler ("frispins", "free spins"), data-süzgüçler 'active _ from/active _ to', completion arkaly maslahatlar.
KYC/AML magazinesurnallary: ECS-shema, 'message', 'rule _ name', 'country', '@timestamp' histogrammasyndaky anomaliýalar.
Üpjün edijileriň gollanmasy: fasetler we sortlar üçin keýword meýdanlary; tekstli düşündirişler - morfologiýasy bolan 'text'.
Düzgünleşdiriji sahypalar: köp dilli meýdanlar, ýumşak maslahatlar üçin 'search _ as _ you _ type'.
Jemi
"Elasticsearch" -de täsirli gözleg diňe bir "BM25-i goşmak" däl: bular dogry analizatorlar we mappingler, multipollar we nested, VM25 + gibrid wektorlar, arassa fasetler we agregasiýalar, şardlamak we ILM tertibi, aýdyň SLO we gözegçilik, şeýle hem howpsuzlyk we Fin Ops. Bu ýörelgeler bilen gözlegiňiz çalt, degişli we öňünden aýdyp boljak bolar we azyk platformasynyň traffiginiň iň ýokary derejesine çydap biler.