التكنولوجيا والبنية التحتية → Elasticsearch والبحث في النص الكامل
Elasticsearch and Full-Text Search
1) دور مرن
Elasticsearch (ES) هو نظام بحث وتحليل موزع يعتمد على الفهارس المقلوبة وهياكل الأعمدة للتجمعات. يعطي:- النص الكامل: الصلة (BM25)، مورفولوجيا، متسامح غامض/مطبعي.
- الجوانب والتجمعات: شرائح سريعة حسب السمات.
- البحث الهجين: BM25 + متجه kNN (دلالات).
- سرعة التطوير: استعلام DSL، ابتلاع خطوط الأنابيب، النظام البيئي الغني.
بالنسبة إلى iGaming/fintech: ابحث عن الألعاب/مقدمي الخدمات، والعروض الترويجية والقواعد، وأوجه التفاعل السريع (المزود، والتقلب، RTP، اللغة)، ابحث عن مجلات KYC/AML، وتحليل السجلات والتنبيهات.
2) نموذج البيانات ورسم الخرائط
2. 1 المؤشر الميداني وأنواعه
لأجل النص الكامل
«الكلمة الرئيسية» - القيم/التجميعات/الفرز الدقيق.
"date"، "long/double"، "boolean"، "ip"، "geo _ point'.
«متداخلة» - مصفوفات من الأشياء ذات الارتباط الحقلي الصحيح.
«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 متعششة للأوجه
سمات النموذج 'الميزات: [{الاسم، القيمة}]' التصميم 'متداخلة'، وإلا فإن الجوانب ستعطي تطابقات خاطئة.
3) الأهمية: BM25 والدفع والهجين
3. 1 كلاسيكيات (BM25)
اجمع بين الحقول والأوزان (العنوان ^ 4، العلامات ^ 2، الوصف).
استخدم «الحد الأدنى _ يجب _ تطابق» للتحكم في المطابقات الصاخبة.
3. 2 ناقلات (kNN) + BM25 (رتبة)
الدمج (على سبيل المثال 384-768) في 'كثيف _ متجه'.
أولاً kNN بواسطة ناقل (أعلى 200-500)، ثم إنقاذ 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) الإنجاز التلقائي والمطالبات
النهج:- Edge N-gram على عنوان subfield'. ngram' (سريع، بسيط).
- مقترحات الإنجاز (حقل «الإنجاز») - تلميحات سريعة، ولكن مسار فهرسة منفصل.
- البحث كما أنت - يجمع بين الترميز لبدء الكلمات والعبارات.
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}
5) المرادفات والأخطاء المطبعية وتعدد اللغات
المرادفات: قم بتحميل الملف/القائمة من خلال مرشح «المرادف» ؛ مجالات منفصلة (كازينو/رياضة).
الأخطاء المطبعية: «الغموض: AUTO» في «multi _ match»، الحد من الطول والحقول. للمطالبات - وضع الإكمال «الغامض».
- الفهرس لكل موقع (ru/en/tr/pt-BR) أو دائرة التحليل المتعدد: 'title _ ru'، 'title _ en'.
- محللات Разные: «روسية»، «إنجليزية»، «تركية»، «برتغالية».
- انقل اللغة إلى مفتاح التوجيه لإبقاء المواقع الساخنة أقرب إلى المستخدم.
6) المرشحات والأوجه والتجمعات
بالنسبة للأوجه، استخدم تجميع «الكلمة الرئيسية» و «المتداخلة».
تجنب الحقول الكاردينالية (المعرفات الفريدة) في التجميعات - احضرها إلى «حقول وقت الاستراحة» أو النوافذ المسبقة.
json
{
"size": 20,
"aggs": {
"by_provider": { "terms": { "field": "provider", "size": 20 } },
"by_volatility": { "terms": { "field": "volatility" } },
"rtp_hist": { "histogram": { "field": "rtp", "interval": 1 } }
}
}
7) إدخال البيانات وتطهير النصوص
اجتذاب خطوط الأنابيب: التطبيع، استخراج الحقل، الترميز الجغرافي، حذف HTML.
المرفق/inst-ocr (حسب الحاجة): PDF/فهرسة الصور (احذر مع PII).
Lemmatization: من خلال المحللات أو خطوط الأنابيب الخارجية (الرموز المسبقة).
8) شظايا ونسخ طبق الأصل و ILM
8. 1 الأبعاد والشحن
عدد أقل من الشظايا أفضل. الهدف: 10-50GB لكل قطعة للأحمال المختلطة.
ابدأ بـ «عدد _ من _ شظايا: 1-3»، مقياس في الواقع. نسخ طبق الأصل - 1 على الأقل في المبيعات.
8. 2 ILM (دورة الحياة)
ساخنة → دافئة → باردة → حذف لجذوع الأشجار/التاريخ الترويجي.
دمج القوة للأجزاء الباردة.
للكتالوجات والبحث عن المنتج - ساخن «دائم» مع التحسين الدوري.
8. 3 خوارزمية الهجرة الخالية من التوقف
المؤشر الجديد «ألعاب _ v2» → «ألعاب» مستعارة بعد «reindex» وملء الردم. الحقول المكتئبة - إزالة تدريجية.
9) لقطات، DR وتحديثات
لقطات لتخزين الجسم (S3/GCS)، وجدولة واستعادة الفحص.
تدحرج تحديثات العقد والتحقق من الوعي بتخصيص القطع (حسب المناطق).
خطط DR: التكرار عبر المناطق (CCR) للفهارس الحرجة (الأدلة والأدلة).
10) السلامة و PII
TLS/mTLS بين العميل والمجموعة.
المكتب الإقليمي لآسيا والمحيط الهادئ: الأدوار لكل مؤشر/عملية ؛ Dev/Stage/Prod - بشكل منفصل.
PII/PCI: لا تفهرس المجالات التي تحتوي على بيانات شخصية دون داع ؛ استخدم القناع الأصغر.
الحق في النسيان: الاحتفاظ بوصلات إلى الوثائق لكي يحذفها user_id ؛ حذف ناعم + رينديكس/إعلان.
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 ≤ 350 مللي ثانية لأفضل 20 نتيجة.
12) FinOps: التكلفة والأداء
حجم الفهرس: حفظ الرمز، تعطيل «fieldata» غير الضروري، استخدام «doc _ values» فقط عند الضرورة.
القطاعات: الخطة تدمج السياسة، لا تسمح بـ «الانقسام».
KNN أغلى في RAM/CPU: dims الحد، «num _ candidates»، المرشح المسبق على BM25.
الحقول الساخنة في ذاكرة الوصول العشوائي: رصد البيانات الميدانية/الكومة ؛ تأخذ التجميعات «الثقيلة» في مؤشرات منفصلة.
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 Log Search (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) تعدد المستأجرين والعزلة
فهرس للمستأجر (أفضل) أو مرشح «المستأجر _ id» + ACL (أغلى في التجميعات).
التوجيه بواسطة «مستأجر _ هوية» لتوطين الشظايا.
قصر طلبات المستأجر على الحدود/المهلات، "استفسار. قضبان حراسة المرحلة.
15) قائمة التنفيذ المرجعية
1. المخطط: 'نص/كلمة رئيسية/متداخلة' + حقول متعددة، 'كثيف _ متجه' إذا لزم الأمر.
2. محللات لكل لغة، مرادفات، edge-ngram للإكمال التلقائي.
3. الصلة: BM25 يعزز + kNN→rescore الهجين.
4. الجوانب: الكلمة الرئيسية/المتداخلة، التجميع فقط للحقول «الصحية».
5. الفهرسة: ابتلاع خطوط الأنابيب (التطبيع)، تحميل الدفعات.
6. الشحن: ابدأ صغير، مستعار للتحرك، ILM لسجلات «طويلة».
7. DR: جدول اللقطات، فحص الاسترداد، CCR للمؤشرات الهامة.
8. الأمن: TLS، RBAC، إخفاء PII، سياسة الحذف.
9. قابلية الملاحظة: زمن الوصول، كومة/جي سي، ضربة مخبأ، شظايا ساخنة، رفض.
10. FinOps: حجم المؤشر، معلمة kNN، تعطيل إضافي «doc _ values/fielddata».
16) الأنماط المضادة
فهرس واحد «للجميع»: تتطلب المجالات المختلفة (الدليل والسجلات والمعاملات) إعدادات مختلفة.
«الغموض الطائش: AUTO» → ببطء وصخب في جميع المجالات.
المرادفات «تلتهم المعنى»: لا تفصل مجالات القاموس.
بدون تعشيش حيث هناك حاجة إلى حزم ميدانية → وجوه زائفة.
الكثير من الشظايا (واحدة لكل مستند) - حالة عنقودية فوق الرأس.
عدم استخدام الاسم المستعار أثناء الهجرات - وقت التوقف والروابط المكسورة.
فهرسة مؤشر الاستثمار الدولي «كما هي» - المخاطر التنظيمية وعمليات إعادة الدمج باهظة الثمن.
17) سياق iGaming/fintech: وصفات سريعة
ابحث عن الألعاب: «multi _ match» مع تعزيز «العنوان ^ 4»، «العلامات ^ 2»، الجوانب حسب المزود/التقلب، المرشحات حسب المنطقة/العملة، هجين مع ناقلات «الموضوعات» (على سبيل المثال، «مصر»، «الفاكهة الكلاسيكية»).
Promo/Bonuses: مرادفات («freespins'،» free spins')، مرشحات البيانات «نشطة _ من/نشطة _ إلى»، نصائح حتى الانتهاء.
سجلات KYC/AML: مخطط ECS، النص الكامل بواسطة «رسالة»، التجميعات بواسطة «القاعدة _ الاسم»، «البلد»، الشذوذ بواسطة «@ timestamp» histogram.
دليل مقدمي الخدمات: حقول الكلمات الرئيسية للأوجه والأنواع ؛ أوصاف النصوص - «النص» مع التشكل.
الصفحات التنظيمية: حقول متعددة اللغات، «ابحث _ as _ you _ type» عن تلميحات ناعمة.
النتيجة
البحث الفعال على Elasticsearch ليس فقط «تشغيل BM25»: هذه هي المحللات والخرائط الصحيحة، والحقول المتعددة والمتداخلة، وهجين من BM25 + المتجهات، والأوجه والتجمعات الأنيقة، وانضباط التشظي و ILM، ومنظومات SLO الواضحة وقابلية الملاحظة، بالإضافة إلى السلامة و Fin عمليات. مع هذه المبادئ، سيكون بحثك سريعًا ومناسبًا ويمكن التنبؤ به - وسيصمد أمام الذروة في حركة مرور منصة المنتج.