GH GambleHub

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

Gibrid soragyň mysaly:
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.
Mysal üçin:
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.

Köp dillilik:
  • 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ň.

Fasetleriň mysaly:
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.
SLO mysallary:
  • 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.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.