GH GambleHub

Технология жана инфраструктура → Elasticsearch жана толук тексттүү издөө

Elasticsearch жана толук текст издөө

1) ролу Elasticsearch

Elasticsearch (ES) - агрегациялар үчүн тескери индекстердин жана колонка структураларынын негизинде бөлүштүрүлгөн издөө жана аналитикалык система. Ал берет:
  • Толук текст: тиешелүү (BM25), морфология, fuzzy/typo толеранттуу.
  • Фасеттер жана агрегациялар: атрибуттар боюнча тез кесүүлөр.
  • Гибриддик издөө: BM25 + вектордук kNN (семантика).
  • Иштеп чыгуу ылдамдыгы: Query DSL, ingest pipelines, бай экосистема.

iGaming/fintech үчүн: оюндарды/провайдерлерди, промо жана эрежелерди, тез жооп берүүчү фасеттерди (провайдер, туруксуздук, RTP, тил), KYC/AML журналдарын издөө, логдорду жана алерттерди талдоо.

2) Маалыматтар жана Mapping модели

2. 1 Индекс жана талаа түрлөрү

'text' (талдануучу талаа) - толук текст үчүн.
'keyword' - так маанилери/агрегация/сорттоо.
`date`, `long/double`, `boolean`, `ip`, `geo_point`.
'nested' - талаалардын туура корреляциясы бар объектилердин массивдери.
'dense _ vector' - вектордук көрүнүштөр (эмбеддинг).

2. 2 Multipol стратегиясы

Талааны бир нече түрдө сактаңыз: 'name. text '(талдануучу),' name. raw` (keyword), `name. ngram '(авто толуктоо үчүн).

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": [
"slot, slot machine => slot,"
"jackpot, super prize => jackpot"
] }
},
"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 Nested фасет үчүн

Түрдүн атрибуттары 'features: [{name, value}]' nested 'дегенге жол бериңиз, антпесе фасеттер жалган окшоштуктарды берет.

3) Тиешелүү: BM25, Boost жана гибрид

3. 1 Классикалык (BM25)

Талааларды таразалар менен айкалыштыруу (title ^ 4, tags ^ 2, description).
"Минимумду _ should _ match" "ызы-чуу" кокустуктарды көзөмөлдөө үчүн колдонуңуз.

3. 2 Векторлор (kNN) + BM25 (rerank)

Эмбеддингдер (мисалы, 384-768) в 'dense _ vector'.
Адегенде вектор боюнча kNN (top 200-500), андан кийин rescore BM25 + бизнес-бусталар (жаңылык, RTP, аймактын лицензиясы).

Гибриддик суроо-талаптын мисалы:
json
{
"knn": {
"field": "embedding",
"query_vector": [/... /],
"k": 400, "num_candidates": 2000
},
"query": {
"bool": {
"should": [
{ "multi_match": {
"query": "Egyptian jackpot slots,"
"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) Auto толуктоо жана кыйытма

Ыкмалары:
  • Edge N-gram жер астындагы 'title. ngram '(тез, жөнөкөй).
  • Completion suggesters ('completion' талаа) - тез кеңештер, бирок өзүнчө индекстөө жолу.
  • Search-as-you-type - сөз менен сөз айкаштарын баштоо үчүн токенизацияны бириктирет.
Мисал:
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}

5) Синонимдер, каталар жана көп тилдүүлүк

Синонимдер: жүктөп файл/тизме аркылуу 'synonym' чыпкасы; домендерди бөлүшүү (казино/спорт).
Каталар: 'fuzziness: AUTO' v 'multi _ match', узундугу жана талаалары менен чектелет. Кеңештер үчүн - 'fuzzy' completion режими.

Көп тилдүүлүк:
  • Индекс-per-local (ru/en/tr/pt-BR) же көп анализдүү схема: 'title _ ru', 'title _ en'.
  • Разные analyzers: `russian`, `english`, `turkish`, `portuguese`.
  • Тилди багыттоо ачкычына (routing) которуп, "ысык" локалдарды колдонуучуга жакын кармаңыз.

6) Чыпкалар, фасеттер жана агрегациялар

Фасеттер үчүн 'keyword' жана 'nested' агрегацияларын колдонуңуз.
Агрегаттарда кардиналдуу талаалардан (уникалдуу ID) качыңыз - 'runtime fields' же алдын ала витриналарды алып чыгыңыз.

Фасеттердин мисалы:
json
{
"size": 20,
"aggs": {
"by_provider": { "terms": { "field": "provider", "size": 20 } },
"by_volatility": { "terms": { "field": "volatility" } },
"rtp_hist": { "histogram": { "field": "rtp", "interval": 1 } }
}
}

7) Маалыматтарды киргизүү жана текстти тазалоо

Ingest pipelines: нормалдаштыруу, талааларды алуу, гео-encoding, HTML алып салуу.
Attachment/ingest-ocr (зарыл): PDF/сүрөттөрдү индекстөө (PII кылдаттык менен).
Лемматизация: анализаторлор же тышкы пайплайндар (precompute токендер) аркылуу.

8) Шарлар, репликалар жана ILM

8. 1 өлчөмдөрү жана шардинг

Аз шардалар - жакшы. Максаты: аралаш жүктөр үчүн 10-50 ГБ.
менен баштоо 'number _ of _ shards: 1-3', иш жүзүндө масштабдоо. Реплика - минималдуу 1 прод.

8. 2 ILM (Lifecycle)

hot → warm → cold → delete үчүн логиндер/тарых промо.
"муздак" сегменттер үчүн кысуу (force merge).
Каталогдор жана продукт издөө үчүн - мезгил-мезгили менен оптималдаштыруу менен "чексиз" hot.

8. 3 Даунтайм жок миграциянын алгоритми

Жаңы индекси 'games _ v2' → alias 'games' кийин которулат 'reindex' жана backfill. Deprecated талаалар - акырындык менен тазалоо.

9) Snapshots, DR жана тактоо

объект сактоо Snapshots (S3/GCS), тартиби жана калыбына келтирүү текшерүү.
Rolling-Update Nod, текшерүү shard allocation awareness (зоналар боюнча).
DR пландары: кросс-аймак репликация (CCR) үчүн критикалык индекстер (колдонмолор, каталогдор).

10) Коопсуздук жана PII

кардар менен кластердин ортосунда TLS/mTLS.
RBAC: индекси/иш ролу; Dev/Stage/Prod - өзүнчө.
PII/PCI: зарылчылыгы жок жеке маалыматтар менен талааларды индекстөө эмес; Ингест-маскасын колдонуңуз.
Right to be forgotten: user_id боюнча алып салуу үчүн документтерге шилтемелерди сактоо; soft-delete + reindex/аноналдаштыруу.

11) Байкоо жана SLO издөө

Метрикасы:
  • query боюнча P50/P95/P99 latency, каталар 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 мисалдар:
  • Оюндарды издөө: P95 ≤ 200 ms, каталар <0. 5% 30-мин терезеде.
  • Кеңештер: P95 ≤ 80 ms.
  • KNN гибрид: P95 ≤ жогорку 20 натыйжалары үчүн 350 ms.

12) FinOps: наркы жана аткаруу

Индекс көлөмү: токенизациялоону үнөмдөө, керексиз 'fielddata' өчүрүү, 'doc _ values' гана керек жерде колдонуу.
Сегменттер: merge саясатын пландаштыруу, "майдалоо" жол бербөө.
KNN RAM/CPU үчүн кымбатыраак: dims, 'num _ candidates', алдын ала filter BM25.
RAM ысык талаалар: мониторинг field data/heap; "оор" агрегацияларды өзүнчө индекстерге алып барыңыз.

13) Өтүнүч мисалдар

13. 1 Көп полдуу толук текст

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

13. 2 чыпкалар + фасеттер

json
{
"query": {
"bool": {
"must": [{"match": {"title": "egypt"}}],
"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 атрибуттарды чыпкалоо

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

13. 4 Издөө (ECS) менен highlight

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) Көп-тенант жана изоляция

Тенант индекси (жакшыраак) же 'tenant _ id' талаасы + ACL чыпкасы (агрегацияларда кымбатыраак).
Routing 'tenant _ id' боюнча шарданы локалдаштыруу үчүн.
Тенанттын суроо-талаптарын лимиттер/таймауттар менен чектеңиз, 'query. phase` guard-rails.

15) Киргизүү чек-тизмеси

1. Схема: 'text/keyword/nested' + multipol, 'dense _ vector' керек болсо.
2. per-тил анализаторлор, синонимдер, edge-ngram auto толуктоо үчүн.
3. Актуалдуулук: BM25 Boost + гибрид kNN → rescore.
4. Фасеттер: keyword/nested, агрегациялар "дени сак" талааларда гана.
5. Индекстөө: ingest pipelines (нормалдаштыруу), батч-жүктөө.
6. Charding: кичинеден баштаңыз, көчүп үчүн alias, "узун" ийиндери үчүн ILM.
7. DR: snapshots тартиби, калыбына келтирүү текшерүү, критикалык индекстер үчүн CCR.
8. Коопсуздук: TLS, RBAC, PII жашыруу, алып салуу саясаты.
9. Байкоо: latency, heap/GC, cache hit, hot shards, rejections.
10. FinOps: индекси өлчөмү, kNN параметрлөө, ашыкча өчүрүү 'doc _ values/fielddata'.

16) Анти-үлгүлөрү

Бир индекс "бардыгы үчүн": ар кандай домендер (каталог, логиндер, транзакциялар) ар кандай орнотууларды талап кылат.
Ойлонбогон 'fuzziness: AUTO' бардык талаада → жай жана ызы-чуу.
Синонимдер "маанисин жеп": сөздүк домендерин бөлүшпөйт.
Эч кандай nested талаалар керек жерде → жалган фасеттер.
Өтө көп шардалар (документке бирден) - cluster state боюнча кошумча чыгымдар.
Миграцияда alias колдонбоо - токтоп калуу жана "сынган" шилтемелер.
PII индекстөө "кандай болсо" - жөнгө салуучу тобокелдиктер жана кымбат реиндекстер.

17) Контекст iGaming/Fintech: тез Recipes

Оюндарды издөө: 'multi _ match' менен 'title ^ 4', 'tags ^ 2', провайдер/туруксуздук боюнча фасеттер, аймак/валюта боюнча фильтрлер, "тема" үчүн векторлор менен гибрид (мисалы, "Египет", "fruit classic").
Промо/бонустар: синонимдер ("фриспиндер", "free spins"), маалымат чыпкалары 'active _ from/active _ to', completion аркылуу кеңештер.
KYC/AML журналдар: ECS схемасы, толук текст 'message', агрегациялар 'rule _ name', 'country', аномалиялар '@timestamp' гистограмма боюнча.
Провайдерлердин колдонмосу: фасеттер жана сорттоо үчүн keyword талаалары; тексттик сыпаттамалар - морфология менен 'text'.
Жөнгө барактар: көп тилдүү талаалар, жумшак кеңештер үчүн 'search _ as _ you _ type'.

Жыйынтык

Elasticsearch боюнча эффективдүү издөө - бул жөн гана "BM25 күйгүзүү" эмес: бул туура анализаторлор жана mappings, мультипольдер жана nested, гибрид VM25 + векторлор, тыкан фасеттер жана агрегациялар, шардана жана ILM тартиби, так SLO жана байкоо, ошондой эле коопсуздук жана Fin Ops. Бул принциптер менен сиздин издөөңүз тез, актуалдуу жана алдын ала айтууга болот - жана азык-түлүк платформасынын трафигинин туу чокуларына туруштук берет.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.