जब मैं किसी प्रश्न या फ़िल्टर या दो के कुछ संयोजन का उपयोग करना चाहिए, तो मुझे कोई विवरण नहीं दिखाई दे सकता है। उनके बीच क्या अंतर है? क्या कोई समझा सकता है?
जब मैं किसी प्रश्न या फ़िल्टर या दो के कुछ संयोजन का उपयोग करना चाहिए, तो मुझे कोई विवरण नहीं दिखाई दे सकता है। उनके बीच क्या अंतर है? क्या कोई समझा सकता है?
जवाबों:
अंतर सरल है: फ़िल्टर कैश्ड हैं और स्कोर को प्रभावित नहीं करते हैं, इसलिए प्रश्नों से अधिक तेज़ है। यहाँ भी एक नज़र है। मान लें कि एक क्वेरी आमतौर पर कुछ ऐसी होती है जो उपयोगकर्ता टाइप करते हैं और बहुत अप्रत्याशित होते हैं, जबकि फ़िल्टर उपयोगकर्ताओं को खोज परिणामों को कम करने में मदद करते हैं, उदाहरण के लिए पहलुओं का उपयोग करना।
यह आधिकारिक दस्तावेज क्या कहता है:
सामान्य नियम के रूप में, फ़िल्टर का उपयोग प्रश्नों के बजाय किया जाना चाहिए:
- बाइनरी हाँ / नहीं खोजों के लिए
- सटीक मूल्यों पर प्रश्नों के लिए
एक सामान्य नियम के रूप में, फ़िल्टर के बजाय प्रश्नों का उपयोग किया जाना चाहिए:
- पूर्ण पाठ खोज के लिए
- जहां परिणाम एक प्रासंगिक स्कोर पर निर्भर करता है
इंडेक्स myindex
में तीन दस्तावेज़ शामिल हैं:
curl -XPOST localhost:9200/myindex/mytype -d '{ "msg": "Hello world!" }'
curl -XPOST localhost:9200/myindex/mytype -d '{ "msg": "Hello world! I am Sam." }'
curl -XPOST localhost:9200/myindex/mytype -d '{ "msg": "Hi Stack Overflow!" }'
प्रश्न: कोई दस्तावेज़ क्वेरी से कितनी अच्छी तरह मेल खाता है
hello sam
(कीवर्ड का उपयोग करके must
)curl localhost:9200/myindex/_search?pretty -d '
{
"query": { "bool": { "must": { "match": { "msg": "hello sam" }}}}
}'
दस्तावेज़ "Hello world! I am Sam."
की तुलना में एक उच्च स्कोर सौंपा गया है "Hello world!"
, क्योंकि पूर्व क्वेरी में दोनों शब्दों से मेल खाता है। दस्तावेज बनाए जाते हैं।
"hits" : [
...
"_score" : 0.74487394,
"_source" : {
"name" : "Hello world! I am Sam."
}
...
"_score" : 0.22108285,
"_source" : {
"name" : "Hello world!"
}
...
फ़िल्टर: क्या कोई दस्तावेज़ क्वेरी से मेल खाता है
hello sam
(कीवर्ड का उपयोग करके filter
)curl localhost:9200/myindex/_search?pretty -d '
{
"query": { "bool": { "filter": { "match": { "msg": "hello sam" }}}}
}'
दस्तावेज़ जिसमें या तो हैं hello
या sam
वापस आ गए हैं। दस्तावेज़ नहीं बनाए गए हैं ।
"hits" : [
...
"_score" : 0.0,
"_source" : {
"name" : "Hello world!"
}
...
"_score" : 0.0,
"_source" : {
"name" : "Hello world! I am Sam."
}
...
इसके अलावा कुछ और। पहले एक फ़िल्टर लागू किया जाता है और फिर उसके परिणामों पर क्वेरी संसाधित की जाती है। प्रति दस्तावेज बाइनरी सच / गलत मैच को स्टोर करने के लिए, बिटसेट एरे नामक चीज का उपयोग किया जाता है। यह बिटसेट एरे मेमोरी में होता है और इसका उपयोग दूसरी बार फिल्टर को क्वेर करने में किया जाता है। इस तरह, बिटसेट सरणी डेटा-संरचना का उपयोग करके, हम कैश्ड परिणाम का उपयोग करने में सक्षम हैं।
यहां ध्यान देने वाली एक और बात, फ़िल्टर कैश तभी बनाया जाता है जब अनुरोध निष्पादित किया जाता है इसलिए केवल दूसरी हिट से, हमें वास्तव में कैशिंग का लाभ मिलता है।
लेकिन फिर आप इसे बढ़ाने के लिए गर्म एपीआई का उपयोग कर सकते हैं । जब आप एक वार्मर एपीआई के खिलाफ फ़िल्टर के साथ एक क्वेरी रजिस्टर करते हैं, तो यह सुनिश्चित करेगा कि जब भी यह लाइव आता है एक नए सेगमेंट के खिलाफ इसे निष्पादित किया जाता है। इसलिए हम पहले निष्पादन से ही लगातार गति प्राप्त करेंगे।
मूल रूप से, एक क्वेरी का उपयोग तब किया जाता है जब आप स्कोरिंग के साथ अपने दस्तावेजों पर खोज करना चाहते हैं। और क्वेरी का उपयोग करके प्राप्त परिणामों के सेट को कम करने के लिए फ़िल्टर का उपयोग किया जाता है। फिल्टर बूलियन हैं।
उदाहरण के लिए, आपके पास ज़ोमैटो जैसे रेस्तरां का एक सूचकांक है। अब आप 'पिज्जा' परोसने वाले रेस्तरां को खोजना चाहते हैं , जो मूल रूप से आपका खोज कीवर्ड है।
तो आप "पिज्जा" वाले सभी दस्तावेजों को खोजने के लिए क्वेरी का उपयोग करेंगे और कुछ परिणाम प्राप्त करेंगे।
अब कहें कि आप ऐसे रेस्तरां की सूची चाहते हैं जो पिज्जा परोसता है और जिसकी रेटिंग कम से कम 4.0 है।
तो आपको क्या करना है अपनी क्वेरी में "पिज्जा" कीवर्ड का उपयोग करें और 4.0 के रूप में रेटिंग के लिए फ़िल्टर लागू करें।
क्या होता है कि फ़िल्टर आमतौर पर आपके सूचकांक को क्वेरी करके प्राप्त परिणामों पर लागू होते हैं।
Filters
-> क्या यह दस्तावेज़ मेल खाता है? एक बाइनरी हाँ या कोई जवाब नहीं
Queries
-> क्या यह दस्तावेज़ मेल खाता है? यह कितनी अच्छी तरह से मेल खाता है? स्कोरिंग का उपयोग करता है
चूंकि एलिस्टिक्स खोज के संस्करण 2 में, फिल्टर और क्वेरीज को मर्ज किया गया है और किसी भी क्वेरी क्लॉज को फिल्टर या क्वेरी (संदर्भ के आधार पर) के रूप में उपयोग किया जा सकता है। संस्करण 1 के साथ, फ़िल्टर कैश किए गए हैं और अगर स्कोरिंग कोई फर्क नहीं पड़ता है तो इसका उपयोग किया जाना चाहिए।