प्रौद्योगिकी और बुनियादी ढांचा → Elasticsearch और पूर्ण-पाठ खोज
Elasticsearch और पूर्ण पाठ खोज
1) Elasticsearch भूमिका
Elasticsearch (ES) एक वितरित खोज और विश्लेषण प्रणाली है जो एकत्रीकरण के लिए उल्टे सूचकांक और स्तंभ संरचनाओं पर आधारित है। यह देता है:- पूर्ण पाठ: प्रासंगिकता (बीएम 25), आकृति विज्ञान, फजी/टाइपो सहिष्णु।
- पहलू और एकत्रीकरण: विशेषताओं द्वारा त्वरित स्लाइस।
- हाइब्रिड खोज: BM25 + वेक्टर kNN (शब्दार्थ)।
- विकास की गति: क्वेरी डीएसएल, निगरानी पाइपलाइनें, समृद्ध पारिस्थितिकी तंत्र।
IGaming/fintech के लिए: गेम/प्रदाताओं, प्रोमो और नियमों की खोज, तेजी से प्रतिक्रिया करने वाले पहलू (प्रदाता, अस्थिरता, आरटीपी, भाषा), केवाईसी/एएमएल पत्रिकाओं की खोज, लॉग और अलर्ट।
2) डेटा मॉडल और मैपिंग
2. 1 फील्ड इंडेक्स और प्रकार
'text' for पूर्ण पाठ।
'keyword' - सटीक मान/एकत्रीकरण/सॉर्ट।
'डेट', 'लॉन्ग/डबल', 'बूलियन', 'आईपी', 'जियो _ पॉइंट'।
'नेटेड' - सही क्षेत्र सहसंबंध वाली वस्तुओं की सरणियाँ।
'डेंस _ वेक्टर' - वेक्टर अभ्यावेदन (एम्बेडिंग)।
2. 2 बहु-क्षेत्र रणनीति
क्षेत्र को कई दृश्यों में संग्रहीत करें: 'नाम। पाठ ',' नाम। कच्चा '(कीवर्ड),' नाम। 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}] 'डिजाइन' नेस्टेड ', अन्यथा पहलू गलत मिलान देंगे.
3) प्रासंगिकता: BM25, बूस्ट और हाइब्रिड
3. 1 क्लासिक्स (BM25)
भार के साथ फ़ील्ड जोड़ें (शीर्षक ^ 4, टैग ^ 2, विवरण)।
शोर मैचों को नियंत्रित करने के लिए 'न्यूनतम चाहिए' का उपयोग करें।
3. 2 वैक्टर (kNN) + BM25 (रेरैंक)
एम्बेडिंग (उदा। 384-768) 'घने _ वेक्टर' में।
पहले केएनएन वेक्टर (शीर्ष 200-500) द्वारा, फिर BM25 + बिजनेस बूस्ट (नवीनता, आरटीपी, क्षेत्र लाइसेंस) को बचाएं।
हाइब्रिड क्वेरी उदाहरण: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) ऑटो-पूर्णता और संकेत
दृष्टिकोण:- सबफील्ड के शीर्षक पर एज एन-ग्राम। ngram '(तेज, सरल)।
- पूर्णता सुझाव ('पूरा' क्षेत्र) - त्वरित संकेत, लेकिन एक अलग अनुक्रमण पथ।
- Search-as-you-type - शब्दों और वाक्यांशों को प्रारंभ करने के लिए टोकनाइजेशन जोड
json
{ "suggest": { "game-suggest": { "prefix": "book o", "completion": { "field": "title_suggest", "fuzzy": { "fuzziness": 1 }}}}}
5) पर्यायवाची, टाइपोस और बहुभाषावाद
पर्यायवाची शब्द: 'पर्यायवाची' फ़िल्टर के माध्यम से फ़ाइल/सूची लोड करें; अलग डोमेन (कैसीनो/खेल)।
टाइपोस: 'फजीनेस:' मल्टी _ मैच 'में ऑटो', लंबाई और क्षेत्रों तक सीमित। संकेतों के लिए - 'फजी' पूर्णता मोड।
बहुभाषावाद:- इंडेक्स-प्रति-लोकेल (ru/en/tr/pt-BR) या मल्टी-एनालाइजर सर्किट: 'शीर्षक _ 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) डेटा प्रविष्टि और पाठ समाशोधन
इनगेस्ट पाइपलाइनें: सामान्यीकरण, फील्ड निष्कर्षण, भू-एन्कोडिंग, एचटीएमएल विलोपन।
संलग्नक/ingest-ocr (आवश्यकतानुसार): PDF/छवि अनुक्रमण (PII के साथ सावधान)।
Lemmatization: विश्लेषकों या बाहरी पाइपलाइनों (प्रीकॉम्प्यूट टोकन) के माध्यम से।
8) शार्ड्स, प्रतिकृतियाँ और ILM
8. 1 आयाम और शार्डिंग
कम शार्क बेहतर हैं। लक्ष्य: 10-50GB मिश्रित भार के लिए प्रति शार्ड।
'संख्या _ of _ shards: 1-3' से प्रारंभ करें, वास्तव में स्केल करें। प्रतिकृतियाँ - बिक्री में कम से कम 1।
8. 2 ILM (जीवन चक्र)
गर्म गर्म ठंड - लॉग/इतिहास प्रोमो के लिए हटाएं।
शीत खंडों के लिए बल विलय।
कैटलॉग और उत्पाद खोज के लिए - आवधिक अनुकूलन के साथ "सदा" गर्म।
8. 3 डाउनटाइम-फ्री माइग्रेशन एल्गोरिथ्म
नया इंडेक्स 'गेम _ v2' → उर्फ 'गेम' 'रेनडेक्स' और बैकफिल के बाद स्विच करता है। हताश खेत - धीरे हटा दें।
9) स्नैपशॉट, डीआर और अपडेट
स्नैपशॉट ऑब्जेक्ट स्टोरेज (S3/GCS), शेड्यूल और पुनर्स्थापित चेक।
नोड्स के रोलिंग अपडेट, शार्ड आवंटन जागरूकता (क्षेत्रों द्वारा) की जाँच।
डीआर योजना: महत्वपूर्ण सूचकांक (निर्देशिका, निर्देशिका) के लिए क्रॉस-रीजन प्रतिकृति (सीसीआर)।
10) सुरक्षा और पीआईआई
क्लाइंट और क्लस्टर के बीच TLS/mTLS।
RBAC: प्रति सूचकांक/संचालन भूमिकाएँ; देव/चरण/Prod - अलग से।
PII/PCI: अनावश्यक रूप से व्यक्तिगत डेटा वाले क्षेत्रों को सूचीबद्ध न करें; निगरानी मास्किंग का उपयोग करें।
भुलाए जाने का अधिकार: user_id द्वारा हटाने के लिए दस्तावेजों के लिंक रखें; सॉफ्ट-डिलीट + रेनडेक्स/घोषणा।
11) अवलोकन और खोज एसएलओ
मेट्रिक्स:- P50/P95/P99 क्वेरी के लिए विलंबता, 4xx/5xx त्रुटियों।
- कैश हिट (क्वेरी कैश/शार्ड अनुरोध कैश)।
- ढेर उपयोग, जीसी паузы, खंड विलय, थ्रेडपूल (खोज/लिखना)।
- हॉट शार्ड्स/हॉट नोड्स, अस्वीकृति।
- KNN: 'ग्राफ _ हिट्स', 'search _ k', लेटेंसी, रिकॉल @ k।
- खेलों के लिए खोज: P95 ≤ 200 ms, त्रुटियाँ <0। 30-मिनट की खिड़की में 5%।
- युक्तियाँ: P95 ≤ 80 ms।
- KNN हाइब्रिड: शीर्ष -20 परिणामों के लिए P95 ≤ 350ms।
12) FinOps: लागत और प्रदर्शन
सूचकांक आकार: टोकन सहेजें, अनावश्यक 'फील्डडाटा' अक्षम करें, जहां आवश्यक हो 'doc _ vals' का उपयोग करें।
खंड: योजना विलय नीति, "विभाजन" की अनुमति न दें।
KNN RAM/CPU में अधिक महंगा है: सीमित डिम्स, 'num _ adments', प्री-फ़िल्टर ऑन 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 लॉग सर्च (ईसीएस)
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' द्वारा रूट करना।
किरायेदार निवेदन को सीमित करें/समय समाप्ति, 'क्वेरी। चरण 'गार्ड-रेल।
15) कार्यान्वयन चेकलिस्ट
1. स्कीमा: 'text/keyword/nested' + मल्टी-फील्ड, 'घने _ vector' यदि आवश्यक हो.
2. ऑटो-पूर्णता के लिए प्रति-भाषा, पर्यायवाची शब्द, किनारे-ngram।
3. प्रासंगिकता: BM25 बूस्ट + हाइब्रिड kNN→rescore।
4. पहलू: कीवर्ड/नेस्टेड, एकत्रीकरण केवल "स्वस्थ" क्षेत्रों के लिए।
5. अनुक्रमण: सबसे पाइपलाइन (सामान्यीकरण), बैच लोडिंग।
6. शार्डिंग: छोटे, हिलने के लिए उर्फ, "लंबे" लॉग के लिए ILM शुरू करें।
7. डीआर: स्नैपशॉट शेड्यूल, रिकवरी चेक, क्रिटिकल इंडेक्स के लिए सीसीआर।
8. सुरक्षा: टीएलएस, आरबीएसी, पीआईआई मास्किंग, विलोपन नीति।
9. अवलोकन: विलंबता, ढेर/जीसी, कैश हिट, गर्म शार्क, अस्वीकृति।
10. FinOps: सूचकांक आकार, kNN पैरामेटराइजेशन, अतिरिक्त 'doc _ vales/fielddata' अक्षम.
16) एंटी-पैटर्न
एक सूचकांक "सभी के लिए": विभिन्न डोमेन (निर्देशिका, लॉग, लेनदेन) के लिए अलग-अलग सेटिंग की आवश्यकता होती है
विचारहीन 'फजीनेस: ऑटो' - सभी क्षेत्रों में धीरे-धीरे और शोर से।
पर्यायवाची शब्द "अर्थ खाएं": शब्दकोश डोमेन को अलग न करें।
नेस्टेड के बिना जहां फील्ड बंडलों - झूठे पहलुओं की आवश्यकता होती है।
बहुत सारे शार्क (प्रति दस्तावेज़ एक) - क्लस्टर स्टेट ओवरहेड।
प्रवास के दौरान उपनाम का गैर-उपयोग - डाउनटाइम और टूटे हुए लिंक।
पीआईआई इंडेक्सेशन "जैसा कि" है - नियामक जोखिम और महंगे बारहसिंगे।
17) iGaming संदर्भ/फिनटेक: त्वरित व्यंजनों
खेलों के लिए खोजें: बूस्ट 'टाइटल ^ 4', 'टैग ^ 2', प्रदाता/अस्थिरता द्वारा पहलू, क्षेत्र/मुद्रा द्वारा फिल्टर, "विषयों" के लिए वैक्टर के साथ संकर (उदाहरण के लिए, "मिस्र", "फल")।
प्रोमो/बोनस: पर्यायवाची शब्द ("फ्रीस्पिन्स", "फ्री स्पिन्स"), डेटा फ़िल्टर 'सक्रिय _ से/सक्रिय _ टू', पूरा होने के माध्यम से युक्तियाँ।
केवाईसी/एएमएल लॉग: ईसीएस स्कीमा, 'संदेश' द्वारा पूर्ण पाठ, 'नियम _ नाम', 'देश' द्वारा एकत्रीकरण, '@ timestamp' हिस्टोग्राम द्वारा विसंगतियाँ।
प्रदाता निर्देशिका: पहलुओं और प्रकारों के लिए कीवर्ड फ़ील्ड; पाठ विवरण - आकृति विज्ञान के साथ 'पाठ'।
नियामक पृष्ठ: बहुभाषी क्षेत्र, नरम संकेतों के लिए 'search _ as _ you _ type'।
परिणाम
Elasticsearch पर प्रभावी खोज न केवल "BM25 पर मोड़" है: ये सही विश्लेषक और मैपिंग, मल्टीफील्ड और नेस्टेड, BM25 + वैक्टर, साफ-सुथरे पहलुओं और एकत्रीकरण का एक संकर, शार्डिंग और ILM का अनुशासन, साथ और सुरक्य और FInInOPPs इन सिद्धांतों के साथ, आपकी खोज तेज, प्रासंगिक और अनुमानित होगी - और उत्पाद मंच यातायात में चोटियों का सामना करेगी।