फ़िल्टरिंग तथा पूर्ण पाठ खोज
1) आपको एक खोज परत की आवश्यकता क्यों है
फ़िल्टरिंग और पूर्ण-पाठ खोज (एफटीएस) प्राथमिक कुंजी द्वारा नहीं, बल्कि "अर्थ से" डेटा तक त्वरित पहुंच प्रदान करता है। एक ठीक से डिज़ाइन की गई खोज परत जोड़ ती है:- सख्त फिल्टर (श्रेणियां, तिथि, मूल्य, पहुंच अधिकार)
- पूर्ण पाठ (लेक्सिकल मैच और रैंकिंग)
- पहलू (नेविगेशन के लिए कुल)
- हाइब्रिड रैंकिंग (BM25/TF-IDF + वेक्टर एम्बेडिंग)
- विश्वसनीय प्रोटोकॉल (कर्सर पैगिनेशन, टोकन टीटीएल, क्रॉस-शार्डिंग)
2) वास्तुशिल्प चित्र
घटक:1. Ingest/ETL → सूचकांक के लिए सामान्यीकरण, डीडुप्लिकेशन, संवर्धन, निर्माण क्षेत्र।
2. इंडेक्सर - रिवर्स इंडेक्स (टोकन दस्तावेज़), कॉलम संरचनाएं, वेक्टर इंडेक्स (HNSW/IVF-PQ)।
3. क्वेरी लेयर - अनुरोध पार्सर, फ़िल्टर/एक्सेस राइट्स का अनुप्रयोग, शार्ड शेड्यूलर, के-वे विलय।
4. रैंकर + एलटीआर/न्यूरल री-रैंक।
5. → कैश, कर्सर, पहलू, हाइलाइट्स, स्वतः पूर्ण।
6. अवलोकन - विलंबता, गुणवत्ता मैट्रिक्स, ए/बी प्रयोग।
3) डेटा और इंडेक्स मॉडल
3. 1 क्षेत्र और विश्लेषक
प्रकार: कीवर्ड (यहां तक कि मिलान), पाठ (विश्लेषण), संख्यात्मक/तिथि/भू, वेक्टर।
विश्लेषक: टोकन, सामान्यीकरण (लोअरकेस, यूनिकोड एनएफकेसी), फिल्टर (स्टॉपवर्ड, स्टेमिंग/लेमेटाइजेशन)।
बहुभाषावाद: प्रति-क्षेत्र विश्लेषक (आरयू, यूके, एन); आईसीयू विश्लेषण; लिप्यंतरण; डायक्रिटिक्स पर विचार।
3. 2 रिवर्स इंडेक्स (विरल)
संरचना: शब्द → पोस्टिंग सूची (docID, शब्द freq, स्थिति)।
रैंकिंग: फील्ड बूस्ट के साथ BM25 (या क्लासिक TF-IDF)।
3. 3 वेक्टर इंडेक्स (घना)
पाठ एम्बेडिंग (उदाहरण के लिए, 384-1024-आयामी)।
एएनएन संरचनाएं: एचएनएसडब्ल्यू, आईवीएफ-पीक्यू, फ्लैट (छोटे सेटों के लिए)।
कोसाइन निकटता/आंतरिक उत्पाद; BM25 अंशांकन (हाइब्रिड)।
3. 4 पहलू और समुच्चय
तेज गणना के लिए मूल्यों का पूर्ववर्ती/स्तंभ भंडारण।
पदानुक्रमित पहलू (श्रेणी/उपश्रेणी)।
रेंज (मूल्य डिब्बे, तारीखें)।
4) प्रश्न: फ़िल्टर + पूर्ण-पाठ + सॉर्ट
4. 1 एपीआई अनुबंध (आरईएसटी)
निवेदन:
GET /v1/search? q = classic slots & limit = 20 & cursor =... & sort = score: desc, created _ at: desc
&filters=brand:("NetEnt","EGT"); price:[10 TO 50];published_at:[2024-01-01 TO ]
&facets=brand,year,price:range(0,10,20,50,100)
प्रतिक्रिया (खंड):
json
{
"items": [ { "id":"...", "title":"...", "score": 12. 3, "highlight": { "content": ["..."] } } ],
"facets": { "brand": [{"value":"NetEnt","count":123},...] },
"page": { "limit":20, "has_more":true, "next_cursor":"opaque-token" }
}
4. 2 ग्राफ़क्यूएल (सरलीकृत)
graphql type Query {
search(query: String!, filter: SearchFilter, first: Int, after: String, sort: [Sort!]): SearchConnection!
}
4. 3 जीआरपीसी
proto message SearchRequest {
string query = 1;
map<string,string> filters = 2;
int32 page_size = 3;
string page_token = 4; // курсор repeated string facets = 5;
}
5) प्राकृतिक भाषा प्रसंस्करण (एनएलपी)
टोकन/सामान्यीकरण: यूनिकोड-सुरक्षित, हाइफ़न/एपोस्ट्रोफ लेखांकन।
Stopwords: भाषा के अनुकूलन सूची।
स्टेमिंग बनाम लेमेटाइजेशन: आरयू/यूके लेमेटाइजेशन के लिए बेहतर है (गुणवत्ता> गति)।
पर्यायवाची शब्दकोश: द्विदिश/दिशात्मक शब्दकोश; टीटीएल के साथ शब्दकोश संस्करण।
टाइपोस (फजी): दूरी प्रतिबंध और सटीक मैच बूस्ट के साथ डेमरू-लेवेनशेटिन।
N-grams/edge-ngrams: स्वतः पूर्ण और संकेत के लिए।
लिप्यंतरण: "श्च ↔" "यू", "कीव/कीव" - पत्राचार नियम।
6) प्रासंगिकता और रैंकिंग
6. 1 बेसिक लेक्सिकल स्कोरिंग
BM25 संग्रह द्वारा 'k1', 'b' सेटिंग के साथ।
फ़ील्ड द्वारा बूस्ट (शीर्षक ^ 3, टैग ^ 1। 5, शरीर ^ 1)।
ताजगी: 'स्कोर + = freshness_boost (क्षय (created_at))'।
6. 2 व्यवहार संकेत
क्लिक-थ्रू रेट, डाइवेल टाइम, पसंदीदा (एंटी-पोजिशनल बेयस के साथ) बचाएं।
Deduplication - ~ समान सामग्री (MinHash/SimHash) के साथ दस्तावेज़ एक साथ सिलाई।
6. 3 लर्निंग-टू-रैंक (एलटीआर)
सुविधाएँ: क्षेत्र BM25, लंबाई, ताजगी, लोकप्रियता, वाक्यांश द्वारा मिलान, स्थिति गति।
मॉडल: LambdaMART/XGBoost; ऑफ़ लाइन मेट्रिक्स NDCG @ k, MAP, Precision @ k; ऑनलाइन ए/बी।
6. 4 न्यूरो-पुनर्व्यवस्था
टू-स्टेप: रिकॉल (BM25/ANN) → टॉप-एन (उदाहरण के लिए, 200) → क्रॉस-एनकोडर रेरैंक।
लागत लेखांकन: समय बजट, भार के तहत न्यूरो-चरण के बिना गिरावट।
6. 5 हाइब्रिड खोज (विरल + घना)
या तो संलयन (गति और योग का सामान्यीकरण), या बहु-चरण (रेरैंक के रूप में घने)।
कैलिब्रेशन महत्वपूर्ण है: मिन-मैक्स/जेड-स्कोर/मात्रात्मक मानचित्रण।
7) फ़िल्टरिंग, पहलू और पहुंच
7. 1 फ़िल्टर
ऑपरेटर: '=', 'इन', रेंज, उपसर्ग, भू-बाउंडिंग बॉक्स/भू-दूरी।
संयोजन: 'और' फ़िल्टर द्वारा, मूल्यों के एक सेट के भीतर 'या' (ब्रांड इन...)।
प्रकार सुरक्षा: संख्यात्मक क्षेत्र पाठ के रूप में पार्स्ड न
7. 2 पहलू
पूर्व-गणना की गई संरचनाओं के लिए सस्ते मायने रखता है।
"एप्लाइड" पहलू शेष पोस्ट-फिल्टर पहलुओं को दिखाते हैं।
7. 3 पहुंच/बहु-किरायेदारी
सुरक्षा फिल्टर रैंकिंग (प्री-फिल्टर) से पहले एकीकृत होते हैं।
दस्तावेज़ में ABAC/RBAC फ़ील्ड ('किरायेदार _ id', 'दृश्यता', 'acl')।
अनुरोध टोकन पर हस्ताक्षर किए गए हैं; बहु-किरायेदार के साथ - स्वचालित 'tenant _ id' filter।
8) पैगिनेशन, कर्सर और स्थिरता
समय के अनुसार क्रमबद्ध होने पर '(स्कोर, टाई-ब्रेकर)' या '(id, id)' द्वारा पगमार्जन।
एचएमएसी और टीटीएल के साथ अपारदर्शी 'पृष्ठ _ टोकन'।
निरंतरता: निकट-वास्तविक समय (NRT) सूचकांक: देरी 0। रिकॉर्डिंग और दृश्यता के बीच 5-2 एस। SLA में इसे दस्तावेज़ करें।
क्रॉस-शार्ड: स्थानीय खोज - के-वे वैश्विक आदेश द्वारा विलय, टोकन में प्रति-शार्ड कर्सर।
9) स्वतः पूर्ण और संकेत
सुझाव: उपसर्ग-ट्राई/एज-ngrams по полю 'शीर्षक'।
लोकप्रिय प्रश्न: लॉग ऑफ क्लिक - लोकप्रियता + निजीकरण (खंड) पर टिप्स।
वर्तनी-as-you-type: दूरी सीमा '<= 1' के साथ तेजी से फजी खोज।
उदाहरण REST:
GET /v1/suggest? q=kaz&limit=8&locale=ru
→ ["casino," "casual games,..."]
10) हाइलाइट्स और स्निपेट्स
स्थिति सूचकांक - मैचों के साथ वाक्यांशों को पुनः प्राप्त करना
एचटीएमएल पलायन, लंबाई सीमा, पड़ोसी टुकड़ों का मिलन।
प्रासंगिक शर्तों के घनत्व द्वारा स्निपेट की रैंकिंग।
11) प्रदर्शन, कैश और एसएलओ
सूचकांक: स्मृति में गर्म खंड; संपीड़न पोस्टिंग; पहलुओं के लिए डॉक्टर मूल्य।
कैश: L1 (प्रक्रिया), L2 (रेडिस), पहलू/समुच्चय कैश; सूचकांक संस्करण द्वारा अक्षम।
SLO: P95 <150-200 ms 'k <= 20', P99 <500 ms; उपलब्धता 99। 9%.
Backpressure: 'k' घटाएँ, ओवरलोड होने पर न्यूरो-चरण अक्षम करें।
एपीआई/उपयोक्ता/किरायेदार कुंजी तक सीमित दर।
12) अवलोकन और गुणवत्ता मैट्रिक्स
तकनीकी मैट्रिक्स:- 'search _ latency _ ms' (P50/P95/P99), 'qps', 'टाइमआउट', 'त्रुटि _ रेट'
- 'cache _ hit _ ratio', 'facet _ cache _ hit', 'rerank _ share'
- 'shard _ fanout', 'merge _ time _ ms', 'ann _ recall @ k'
- NDCG @ k, MAP, MRR, Recall @ k, Prission @ k चिह्नित नमूनों पर।
- CTR @ k, sCTR (संतुष्ट क्लिक), समय, отказ (पोगोस्टिक दर)।
A/B: "रेलिंग" मेट्रिक्स (विलंबता, त्रुटियां) + लक्ष्य (NDCG प्रॉक्सी) को ठीक करें।
13) परीक्षण
प्रासंगिकता इकाई परीक्षण: प्रमुख अनुरोधों के लिए अपेक्षित मैचों की जाँच
संपत्ति-आधारित: टाइपोस/पर्यायवाची शब्द/भाषाओं का प्रतिरोध।
Pagination: पृष्ठ सीमा पर कोई डुप्लिकेट नहीं (अनुबंध की तलाश)।
सुरक्षा: एक्सेस फिल्टर हमेशा लागू होते हैं (यहां तक कि फेसेट-काउंट पर)।
शब्दकोश प्रतिगमन: पर्यायवाची शब्द और फजी नियम।
14) सुरक्षा और गोपनीयता
पीआईआई वाले क्षेत्रों को पाठ के रूप में अनुक्रमित नहीं किया गया है; अलग से स्टोर/एन्क्रिप्ट।
संग्रहीत स्रोतों को न्यूनतम करें (स्टोर = गलत, स्निपेट फ़ील्ड केवल)।
प्रश्न गोपनीयता: पीआईआई के साथ कच्चे अनुरोध लॉग न करें; गुमनामी/हैशिंग।
मल्टी-किरायेदार: सख्त सूचकांक अलगाव या अनिवार्य 'tenant _ id' filter।
15) माइग्रेशन और इंटरऑपरेबिलिटी
डबल राइट और क्रमिक स्विच के साथ वर्शनिंग इंडेक्स स्कीम (v1→v2)।
विश्लेषक संगतता: पुरानी श्रृंखलाओं को फिर से इंडेक्स न करें।
पर्यायवाची/स्टॉपवर्ड शब्दकोशों का घुमाव: 'संस्करण', 'सक्रिय _ at', रोलबैक।
16) व्यावहारिक व्यंजनों
16. 1 क्लासिक लेक्सिकल सर्च (BM25)
क्षेत्र: 'शीर्षक ^ 3', 'टैग ^ 2', 'बॉडी ^ 1'।
विश्लेषक: भाषा-विशिष्ट + लेमेटाइजेशन।
लघु प्रश्नों के लिए फजी ('<= 3' टोकन), 'फजीनेस = 1'।
16. 2 हाइब्रिड विरल + घना
1. क्वेरी एम्बेडिंग द्वारा ANN खोज (k = 200)
2. शीर्ष-200 BM25 के साथ विलय करें
3. कैलिब्रेशन रैंक फ्यूजन
4. शीर्ष-एन (N = 20), वैकल्पिक रूप से - पर्याप्त बजट के साथ रैंक क्रॉस-एनकोडर लें।
16. 3 फेसेटेड कैटलॉग नेविगेशन
अधिकार/किरायेदार द्वारा हार्ड प्री-फ़िल्टर
पोस्ट-फिल्टर पहलू (सक्रिय फिल्टर सहित गिनती)
प्रासंगिकता या व्यापार क्षेत्र (मूल्य/नवीनता) द्वारा
17) नमूना अनुरोध (छद्म डीएसएल)
फ़िल्टर और छंटाई:json
{
"query": "live casino,"
"filters": {
"country": ["EE","LV","LT"],
"license": ["MGA","UKGC"],
"launched_at": {"gte": "2023-01-01"}
},
"sort": ["_score:desc","launched_at:desc"],
"facets": ["country","license"],
"page": {"limit": 20, "cursor": "opaque"}
}
जियोपोइस्क:
json
{
"query": "casino",
"geo": {"lat": 59. 437, "lon": 24. 753, "radius_km": 50}
}
स्वतः पूर्ण:
json
{ "prefix": "evo", "field": "brand_suggest", "limit": 8 }
18) यूएक्स पैटर्न
सक्रिय फ़िल्टर चिप्स + "सभी को रीसेट करें।"
खाली परिणाम: "कोशिश करो"... (पर्यायवाची शब्द, फिल्टर हटाएं)।
शून्य संकेत: लोकप्रिय प्रश्न/श्रेणियां।
संकेतक पृष्ठभूमि (अधिक बटन) और अनंत स्क्रॉलिंग; लागू फिल्टर का निश्चित संकेतक।
अलग स्विच "ध्यान में टाइपोस", "वाक्यांश का सटीक मिलान"।
19) लगातार त्रुटियां और विरोधी पैटर्न
→ डबल्स/जंप करते समय कोई टाई-ब्रेकर नहीं।
सक्रिय फिल्टर को ध्यान में रखे बिना पहलू - "गलत" मायने रखता है।
पोस्ट-रैंकिंग एक्सेस फिल्टर लागू करें।
एक विश्लेषक के साथ विभिन्न भाषाओं को मिलाना।
कर्सर की तलाश के बजाय डीप पैगिनेशन ऑफ़ सेट/लिमिट।
विलंबता से असीमित फजी → विस्फोट।
20) कार्यान्वयन चेकलिस्ट
1. खेतों और उनके प्रकारों को परिभाषित करें, प्रति-लोकेल विश्लेषक असाइन करें।
2. व्युत्क्रम सूचकांक + डिजाइन करें (ऑप्ट।) वेक्टर ANN।
3. एक क्वेरी पार्सर लागू करें और पूर्व-फिल्टर सुरक्षित करें।
4. BM25 और फील्ड बूस्ट सेट करें; पहलुओं को संलग्न करें।
5. संकेतक (अपारदर्शी, एचएमएसी, टीटीएल) और के-वे शार्ड द्वारा विलय करें.
6. स्वतः पूर्ण, हाइलाइट्स, सुरक्षित परिरक्षण जोड़ें।
7. मेट्रिक्स: विलंबता, NDCG @ k, CTR; L1/L2 कैश।
8. ट्यूनिंग प्रासंगिकता के लिए ए/बी ढांचा।
9. दस्तावेज़ SLA: NRT देरी, 'सीमा' सीमा, स्थिरता की गारंटी।
10. प्रवासन योजना: सूचकांक, शब्दकोश और विश्लेषकों के संस्करण।
एक अच्छी तरह से डिज़ाइन किया गया फ़िल्टरिंग और पूर्ण-पाठ खोज परत न केवल एक तेज़ सूचकांक है, बल्कि कर्सर, सुरक्षा, अनुमानित यूएक्स और औसत दर्जे की प्रासंगिकता के साथ एक स्पष्ट प्रोटोकॉल अनुबंध भी है। यह दृष्टिकोण हजारों से अरबों दस्तावेजों तक तराजू और तंत्रिका नेटवर्क रैंकिंग के साथ शास्त्रीय शाब्दिक खोज और आधुनिक संकर परिदृश्यों दोनों का समर्थन करता है।