GH GambleHub

טכנולוגיה ותשתית * Elasticsearch וחיפוש טקסט מלא

שמיעה אלסטית וחיפוש טקסט מלא

1) תפקיד Elasticsearch

Elasticsearch (בקיצור: ES) היא מערכת חיפוש וניתוח מבוזרת המבוססת על אינדקסים הפוכים ומבני עמודות. זה נותן:
  • טקסט מלא: רלוונטיות (BM25), מורפולוגיה, מעורפל/typo סובלני.
  • היבטים וצבירות: פרוסות מהירות על ידי תכונות.
  • חיפוש היברידי: BM25 + וקטור kNN (סמנטיקה).
  • מהירות פיתוח: Query DSL, בלע צינורות, מערכת אקולוגית עשירה.

עבור iGaming/fintech: חיפוש אחר משחקים/ספקים, פרומואים וכללים, היבטים המהירים (ספק, תנודתיות, RTP, שפה), חיפוש אחר מגזיני KYC/AML, פריסת יומנים והתראות.


2) מודל נתונים ומפיות

2. אינדקס שדה וסוגים 1

טקסט לטקסט מלא.
'keyword' ערכים מדויקים/אגרגציות/סוג.
"דייט", "ארוך/כפול", "בוליאני", "ip", "geo _ point'.
'מקונן' - מערך של אובייקטים עם קורלציית שדה נכונה.
'dense _ vector' - ייצוג וקטורי (שיבוץ).

2. 2 אסטרטגיה רב ־ תחומית

לאחסן את השדה בכמה תצוגות: 'שם. טקסט, 'שם. גולמי (מילת מפתח), 'שם. nam '(להשלמה אוטומטית).

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 (rerk)

שיבוץ (למשל: 384-768) ב- ”dosse _ vector”.
תחילה kNN על ידי וקטור (200-500), ולאחר מכן rescore BM25 + business hosts (חידוש, 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-גרם על כותרת התת-שדה. nam '(מהיר, פשוט).
  • Supertion swesters (”שדה השלמה”) - רמזים מהירים, אבל נתיב אינדקס נפרד.
  • חיפוש-כפי-you-type-משלב אסימונים להתחלת מילים וביטויים.
דוגמיות:
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}

5) מילים נרדפות, שגיאות דפוס ורב ־ לשוניות

מילים נרדפות: טען את הקובץ/רשימה דרך מסנן ה ”מילה נרדפת”; תחומים נפרדים (קזינו/ספורט).
Typos: ”ערפול: AUTO 'in' multi _ game”, הגבלת אורך ושדות. למצב השלמה ”מעורפל”.

רב-לשוניות:
  • Index-per-locale (ru/en/tr/pt-BR) או multi-analizer circle: ”כותרת _ ru”, ”כותרת _ 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.
מצורף/innegut-ocr (לפי הצורך): PDF/image indexing (זהירות עם PII).
למטיזציה: באמצעות מנתחים או צינורות חיצוניים (אסימונים נקודתיים).


8) רסיסים, העתקים ו ־ ILM

8. ממדים 1 ושרדינג

פחות רסיסים טובים יותר. 10-50GB לשבר לעומסים מעורבים.
התחל עם ”מספר _ של _ shards: 1-3”, קנה מידה למעשה. העתקים - לפחות 1 במכירות.

8. 2 ILM (אופן חיים)

# מחיקה חמה של קור מחק עבור יומנים/פרומו היסטוריה.
מיזוג כוח עבור קטעים קרים.
לקטלוגים וחיפוש מוצר - ”נצחי” חם עם אופטימיזציה מחזורית.

8. 3 אלגוריתם נדידה ללא זמן

האינדקס החדש 'games _ v2' iaas 'games' מתגים אחרי 'reindex' ו-backfill. שדות מדוכאים - להסיר בהדרגה.


9) תמונות, ד "ר ועדכונים

תמונות לאחסון אובייקטים (S3/GCS), לוח זמנים ובדיקה מחודשת.
עדכונים של צמתים, בדיקת מודעות הקצאת רסיס (על ידי אזורים).
ד "ר תוכניות: שכפול חוצה-אזור (CCR) לאינדקסים קריטיים (ספריות, ספריות).


10) בטיחות ומח "ש

TLS/mTLS בין לקוח לאשכול.
RBAC: תפקידים לאינדקס/פעולה; Dev/Stage/Prod - בנפרד.
PII/PCI: אל תפתח שדות עם נתונים אישיים שלא לצורך; השתמש במסווה בלע.
זכות להישכח: לשמור קישורים למסמכים למחיקה על ידי user_id; רך למחוק + רינדקס/הודעה.


11) יכולת תצפית וחיפוש SLO

מדדים:
  • P50/P95/P99 איחור לשאילתה, 4xx/5xx שגיאות.
  • להיט מטמון (מטמון שאילתות/מטמון בקשה).
  • שימוש בערימה, GC, מיזוג קטעים, שלוליות (חיפוש/כתיבה).
  • רסיסים חמים/צמתים חמים, דחיות.
  • KnN: "graph _ hits'," search _ k ", latency, recall @ k.
דוגמאות SLO:
  • חיפוש אחר משחקים: P95 200 ms, שגיאות <0. 5% בחלון 30 דקות.
  • טיפים: P95 חסום 80 ms.
  • P95 350ms עבור למעלה-20 תוצאות.

12) FinOps: עלות וביצועים

גודל אינדקס: שמור אסימונים, בטל ”fielddata” מיותר, השתמש ב ”doc _ values” רק במקרה הצורך.
מגזרים: מדיניות מיזוג תכנית, לא לאפשר ”פיצול”.
KNN יקר יותר ב RAM/CPU: הגבלת עממים, 'num _ מועמדים', קדם-מסנן על 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) רב ־ דייר ובידוד

אינדקס לדייר (טוב יותר) או field 'terant _ id' + ACL filter (יקר יותר על אגרגציות).
ניתוב על ידי 'דייר _ id' כדי לאתר רסיסים.
הגבל את בקשות הדייר להגבלות/פסקי זמן, שאילתה. שלב "מעקות שמירה.


15) רשימת מימושים

1. סכימה: ”טקסט/מילת מפתח/מקונן” + רב-שדות, ”צפוף _ וקטור” במידת הצורך.
2. אנליזרים לשפה, מילים נרדפות, אדג-נגרם להשלמה אוטומטית.
3. רלוונטי: BM25 מגביר + kNN = rescore היברידי.
4. היבטים: מילת מפתח/מקונן, צבירה רק לשדות ”בריאים”.
5. אינדקס: בלע צינורות (נורמליזציה), טעינה אצווה.
6. התחל קטן, כינוי למעבר, ILM ליומנים ”ארוכים”.
7. ד "ר: לוח הזמנים של התמונות, בדיקת התאוששות, CCR לאינדקסים קריטיים.
8. אבטחה: TLS, RBAC, מסווה PII, מדיניות מחיקה.
9. יכולת תצפית: Latency, ערימה/GC, להיט מטמון, שברים חמים, דחיות.
10. FinOps: גודל אינדקס, פרמטריזציה של kNN, ביטול תוספת 'doc _ values/fielddata'.


16) אנטי דפוסים

אינדקס אחד ”לכל”: תחומים שונים (ספרייה, יומנים, עסקאות) דורשים הגדרות שונות.
חוסר התחשבות: אוטומטי. לאט וברעשן בכל התחומים.
מילים נרדפות ”לאכול את המשמעות”: לא להפריד בין תחומי מילון.
ללא קינון שבו חבילות שדה = היבטים כוזבים נחוצים.
יותר מדי רסיסים (אחד לכל מסמך) - תקורה במצב אשכול.
אי שימוש בשם בדוי במהלך נדידה - השבתה וחוליות שבורות.
אינדקס PII ”כפי שהוא” - סיכונים רגולטוריים ואינדקסים יקרים.


17) הקשר iGaming/fintech: מתכונים מהירים

חיפוש אחר משחקים: ”multi _ batch” עם הדחיפה ”thar”, ”tages ı2”, היבטים של הספק/תנודתיות, מסננים על ידי אזור/מטבע, היברידי עם וקטורים עבור ”נושאים” (לדוגמה, ”Egypt”, ”fruit classic”).
פרומו/בונוסים: מילים נרדפות ("freespins", "free spins'), מסנני נתונים" active _ from/active _ to ", טיפים באמצעות השלמה.
יומני KYC/AML: סכימת ECS, טקסט מלא על ידי ”הודעה”, צבירה על ידי ”כלל _ שם”, ”מדינה”, חריגות על ידי ”@ timestamp” היסטוגרמה.
ספריית ספק: שדות מילות מפתח עבור היבטים ומינים; תיאורי טקסט - 'טקסט' עם מורפולוגיה.
דפי רגולציה: שדות רב-לשוניים, ”search _ as _ you _ type” עבור רמזים רכים.


תוצאות

חיפוש יעיל על Elasticsearch אינו רק "מדליק את BM25": אלה הם המנתחים הנכונים והמפות, שדות מרובים ומקוננים, הכלאה של BM25 + וקטורים, היבטים מסודרים וצבירים, משמעת של חדירה ו-ILM, סלו "ם ברורים ויכולת תצפית, כמו גם בטיחות ו-FinOps עם עקרונות אלה, החיפוש שלך יהיה מהיר, רלוונטי וצפוי - ויעמוד בשיאים בתעבורת פלטפורמת מוצר.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.