GH GambleHub

تکنولوژی و زیرساخت → Elasticsearch و جستجوی کامل متن

جستجوی الاستیک و جستجوی تمام متن

1) نقش Elasticsearch

Elasticsearch (ES) یک سیستم جستجو و تجزیه و تحلیل توزیع شده بر اساس شاخص های معکوس و ساختارهای ستون برای جمع آوری است. می دهد:
  • متن کامل: ارتباط (BM25)، مورفولوژی، تحمل فازی/تایپو.
  • جنبه ها و جمع آوری ها: برش های سریع توسط ویژگی ها.
  • جستجوی ترکیبی: BM25 + بردار kNN (معناشناسی).
  • سرعت توسعه: پرس و جو DSL، مصرف خطوط لوله، اکوسیستم غنی.

برای iGaming/fintech: جستجو برای بازی ها/ارائه دهندگان، تبلیغات و قوانین، جنبه های سریع واکنش (ارائه دهنده، نوسانات، RTP، زبان)، جستجو برای مجلات KYC/AML، تجزیه سیاهههای مربوط و هشدارها.


2) مدل داده ها و نقشه ها

2. 1 شاخص زمینه و انواع

'متن' برای متن کامل.
«keyword» - مقادیر دقیق/تجمع/مرتب سازی.
'date'، 'long/double'، 'boolean'، 'ip'، 'geo _ point'.
'nested' - آرایه ای از اشیاء با همبستگی درست میدان.
'dense _ vector' - نمایش برداری (جاسازی).

2. 2 استراتژی چند زمینه ای

فیلد را در چندین نمایش ذخیره کنید: نام. متن '،' نام. raw (کلمه کلیدی)، نام. 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": [
"слот,игровой автомат => слот",
"джекпот,суперприз => джекпот"
] }
},
"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 برای چهره ها

ویژگی های فرم «ویژگی ها: [{name, value}]» design «nested»، در غیر این صورت جنبه ها مسابقات دروغین را ارائه می دهند.


3) ارتباط: BM25، تقویت و ترکیبی

3. 1 کلاسیک (BM25)

ترکیب فیلدها با وزن (title ^ 4, tags ^ 2, description).
استفاده از 'minimum _ should _ match' برای کنترل مسابقات پر سر و صدا.

3. 2 بردار (kNN) + BM25 (rerank)

جاسازی (به عنوان مثال،. 384-768) در 'dense _ vector'.
اول kNN بردار (بالا 200-500)، پس از آن rescore BM25 + افزایش کسب و کار (تازگی، RTP، مجوز منطقه).

مثال پرس و جوی ترکیبی:
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) تکمیل خودکار و پیشنهادات

روش ها:
  • لبه N-gram در عنوان زیر زمینه. ngram '(سریع، ساده)
  • پیشنهادات تکمیل (فیلد تکمیل) - نکات سریع، اما یک مسیر نمایه سازی جداگانه.
  • Search-as-you-type - ترکیبی از نشانه گذاری برای شروع کلمات و عبارات.
نمونه های نمونه:
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}

5) مترادف، typos و چند زبانه

مترادف: فایل/لیست را از طریق فیلتر «مترادف» بارگیری کنید. دامنه های جداگانه (کازینو/ورزش).
تایپ: 'fuzziness: AUTO' در 'multi _ match'، محدود به طول و زمینه ها. برای اعلان ها - حالت تکمیل «فازی».

چند زبانه بودن:
  • Index-per-locale (ru/en/tr/pt-BR) یا مدار چند آنالایزر: 'title _ ru'، 'title _ en'.
  • آنالایزرهای Разные: «روسی»، «انگلیسی»، «ترکی»، «پرتغالی».
  • زبان را به کلید مسیریابی منتقل کنید تا مکانهای داغ را به کاربر نزدیکتر کنید.

6) فیلترها، جنبه ها و تجمع ها

برای جنبه ها، از «کلمه کلیدی» و «تجمع» استفاده کنید.
اجتناب از زمینه های اصلی (شناسه های منحصر به فرد) در aggregations - آنها را به «زمینه های runtime» یا پیش پنجره.

جنبه های مثال:
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 pipeline: عادی سازی، استخراج زمینه، رمزگذاری جغرافیایی، حذف HTML.
پیوست/مصرف-ocr (در صورت نیاز): نمایه سازی PDF/تصویر (مراقب PII باشید).
Lemmatization: از طریق آنالایزرها یا خطوط لوله خارجی (نشانه های پیش محاسبه).


8) قطعات، کپی و ILM

8. 1 ابعاد و شاردینگ

چربی کمتر بهتر است. هدف: 10-50GB در هر قطعه برای بارهای مخلوط.
با «number _ of _ shards: 1-3» شروع کنید، در واقع مقیاس کنید. کپی - حداقل 1 در فروش.

8. 2 ILM (چرخه عمر)

داغ → گرم → سرد → حذف برای سیاهههای مربوط/تاریخ تبلیغی.
ادغام نیرو برای بخش های سرد.
برای کاتالوگ ها و جستجوی محصول - «دائمی» داغ با بهینه سازی دوره ای.

8. 3 الگوریتم مهاجرت بدون Downtime

شاخص جدید «games _ v2» → نام مستعار «games» پس از «reindex» و backfill تغییر میکند. زمینه های افسرده - به تدریج حذف کنید.


9) عکس های فوری، DR و به روز رسانی

عکس های فوری به ذخیره سازی شی (S3/GCS)، برنامه و بازگرداندن چک.
نورد به روز رسانی گره، چک کردن آگاهی تخصیص شارد (توسط مناطق).
برنامه های DR: تکرار متقابل منطقه (CCR) برای شاخص های بحرانی (دایرکتوری ها، دایرکتوری ها).


10) ایمنی و PII

TLS/mTLS بین مشتری و خوشه.
RBAC: نقش در هر شاخص/عملیات ؛ Dev/Stage/Prod - به طور جداگانه.
PII/PCI: فیلدهای مربوط به اطلاعات شخصی را به صورت غیر ضروری فهرست بندی نکنید ؛ از ماسک استفاده کنید.
حق فراموش شدن: نگه داشتن لینک به اسناد برای حذف توسط user_id ؛ soft-delete + reindex/اعلامیه.


11) قابلیت مشاهده و جستجوی SLO

معیارها:
  • تاخیر P50/P95/P99 به پرس و جو، خطاهای 4xx/5xx.
  • ضربه نهانگاه) نهانگاه درخواست پرسوجو/نهانگاه).
  • استفاده از پشته، паузы GC، ادغام بخش، threadpools (جستجو/نوشتن).
  • قطعات داغ/گره های داغ، رد.
  • KNN: 'graph _ hits', 'search _ k', latency, recall @k.
مثال های SLO:
  • جستجو برای بازی: P95 ≤ 200 میلی ثانیه، خطا <0. 5٪ در پنجره 30 دقیقه.
  • نکات: P95 ≤ 80 میلی ثانیه.
  • ترکیبی KNN: P95 ≤ 350ms برای نتایج بالا 20.

12) FinOps: هزینه و عملکرد

اندازه فهرست: نشانه گذاری را ذخیره کنید، «fielddata» غیر ضروری را غیرفعال کنید، فقط در صورت لزوم از «doc _ values» استفاده کنید.
بخش ها: سیاست ادغام طرح، اجازه نمی دهد «تقسیم».
KNN در RAM/CPU گرانتر است: limit dims, 'num _ candidates', pre-filter on BM25.
زمینه های داغ در RAM: نظارت بر داده های زمینه/پشته ؛ جمع های «سنگین» را به شاخص های جداگانه تبدیل کنید.


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": "египет" }}],
"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 فیلتر کردن ویژگی های تو در تو

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

13. 4 جستجوی ورود (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) چند مستاجر و انزوا

فهرست به مستاجر (بهتر) یا فیلد 'tenant _ id' + فیلتر ACL (گران تر در جمع).
مسیریابی توسط 'tenant _ id' برای بومی سازی قطعات.
محدود کردن درخواست های مستاجر به محدودیت/زمان، پرس و جو. مرحله 'گارد ریل.


15) چک لیست پیاده سازی

1. Schema: 'text/keyword/nested' + multi-fields, 'dense _ vector' در صورت لزوم.
2. آنالایزرها در هر زبان، مترادف، لبه ngram برای تکمیل خودکار.
3. ارتباط: افزایش BM25 + ترکیبی kNN → rescore.
4. Facets: کلمه کلیدی/nested، تجمع فقط برای زمینه های «سالم».
5. نمایه سازی: مصرف خطوط لوله (عادی سازی)، بارگیری دسته ای.
6. Sharding: شروع کوچک، نام مستعار برای حرکت، ILM برای «طولانی» سیاهههای مربوط.
7. DR: برنامه عکس های فوری، بررسی بازیابی، CCR برای شاخص های بحرانی.
8. امنیت: TLS، RBAC، PII ماسک، سیاست حذف.
9. قابلیت مشاهده: تاخیر، پشته/GC، ضربه کش، قطعات داغ، رد.
10. FinOps: اندازه شاخص، پارامتر kNN، غیرفعال کردن «doc _ values/fielddata» اضافی.


16) ضد الگوهای

یک شاخص «برای همه»: دامنه های مختلف (دایرکتوری، سیاههها، معاملات) نیاز به تنظیمات مختلف دارند.
بی فکری «فازی: خودکار» → به آرامی و با سر و صدا در همه زمینه ها.
مترادف «خوردن معنی»: دامنه های فرهنگ لغت را جدا نکنید.
بدون تودرتو که در آن بسته نرم افزاری درست → چهره نادرست مورد نیاز است.
بیش از حد بسیاری از قطعات (یکی در هر سند) - سربار حالت خوشه.
عدم استفاده از نام مستعار در طول مهاجرت - خرابی و لینک های شکسته.
شاخص PII «همانطور که هست» - خطرات نظارتی و reindexes گران است.


17) زمینه iGaming/fintech: دستور العمل های سریع

جستجو برای بازی ها: 'multi _ match' با افزایش 'title ^ 4'، 'tags ^ 2'، جنبه های ارائه دهنده/نوسانات، فیلتر بر اساس منطقه/ارز، ترکیبی با بردارها برای «موضوعات» (به عنوان مثال، «مصر»، «میوه کلاسیک»).
Promo/bonuses: مترادف («freespins», «چرخش آزاد»), فیلتر داده ها «active _ from/active _ to», tips through completion.
سیاهههای مربوط به KYC/AML: طرح ECS، متن کامل توسط «پیام»، تجمع توسط «rule _ name»، «کشور»، ناهنجاری های هیستوگرام «timestamp».
دایرکتوری ارائه دهنده: زمینه های کلمه کلیدی برای جنبه ها و انواع ؛ توضیحات متن - «متن» با مورفولوژی.
صفحات نظارتی: زمینه های چند زبانه، 'search _ as _ you _ type' برای نکات نرم.


نتیجه گیری

جستجوی موثر در Elasticsearch نه تنها «روشن کردن BM25» است: اینها آنالیزورهای مناسب و نقشه برداری، چند زمینه و تو در تو، ترکیبی از بردارهای BM25 +، جنبه های شسته و رفته و تجمع، نظم و انضباط شاردینگ و ILM، SLO های واضح و قابل مشاهده، و همچنین ایمنی و FinOps. با این اصول، جستجوی شما سریع، مرتبط و قابل پیش بینی خواهد بود - و در اوج ترافیک پلت فرم محصول مقاومت خواهد کرد.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.