تکنولوژی و زیرساخت → 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.
- جستجو برای بازی: 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. با این اصول، جستجوی شما سریع، مرتبط و قابل پیش بینی خواهد بود - و در اوج ترافیک پلت فرم محصول مقاومت خواهد کرد.