GH GambleHub

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

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": [
"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 برای چهره ها

ویژگی های فرم «ویژگی ها: [{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": "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) تکمیل خودکار و پیشنهادات

روش ها:
  • لبه 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": "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 فیلتر کردن ویژگی های تو در تو

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
@Gamble_GC
شروع یکپارچه‌سازی

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

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

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