MUST और SHOULD बूल क्वेरी के बीच एलिटिक्स खोज अंतर


169

बीच क्या अंतर है MUSTऔर SHOULDES में bool क्वेरी?

अगर मुझे केवल ऐसे परिणाम चाहिए, जिनमें मेरी शर्तें हों, तो मुझे उपयोग करना चाहिए must?

मेरे पास एक क्वेरी है जिसमें केवल कुछ मान शामिल होने चाहिए, और यह भी कोई परिणाम नहीं है कि आज के समय / तिथि से कम तिथि / टाइमस्टैम्प है - अब

भी

क्या मुझे कोड बोले की तरह कई फिल्टर का उपयोग करना चाहिए:

"filtered": {
"filter": {
"bool" : {
        "must" : {
            "term" : { "type" : 1 }
            "term" : { "totals" : 14 }
            "term" : { "groupId" : 3 }
            "range" : {
                "expires" : {
                    "gte": "now"
                }
            }
        },

जवाबों:


250

इसका मतलब होना चाहिए : मिलान दस्तावेजों में क्लॉज (क्वेरी) दिखाई देना चाहिए। ये खंड तार्किक और की तरह मेल खाना चाहिए ।

इसका अर्थ होना चाहिए : इनमें से कम से कम एक खंड का मिलान होना चाहिए, जैसे तार्किक या

मूल रूप से उनका उपयोग तार्किक ऑपरेटरों और OR की तरह किया जाता है। देखें इस

अब एक बूल क्वेरी में :

इसका मतलब होना चाहिए : क्लॉज़ जो दस्तावेज़ में शामिल होने के लिए मेल खाना चाहिए

का अर्थ होना चाहिए : यदि ये खंड मेल खाते हैं, तो वे बढ़ जाते हैं _score; अन्यथा, उनके पास कोई प्रभाव नहीं है। वे बस प्रत्येक दस्तावेज़ के लिए प्रासंगिक स्कोर को परिष्कृत करने के लिए उपयोग किया जाता है।


हां आप अंदर कई फिल्टर का उपयोग कर सकते हैं must


पार्टी के लिए थोड़ा देर से, लेकिन mustश्रेणियों, या मूल्य निर्धारण, और shouldविशेषताओं के लिए, जैसे आकार और रंग के बारे में कैसे। अब, यदि आकार L और XL का चयन किया जाता है, तो यह उन दोनों के बीच होना चाहिए, लेकिन यदि रंग हरा भी चुना जाता है, तो इसके लिए (आकार L या XL) और (रंग हरा) होना आवश्यक है। क्या यह संभव है?
मेव

मेरा मानना ​​है कि विशेषताओं के लिए फ़िल्टर बेहतर तरीका हो सकता है। वे सटीक मिलानों की ओर बढ़ते हैं और प्रासंगिकता आधारित खोजों के नहीं। अधिक जानकारी के लिए डॉक्स में प्रश्न और फ़िल्टर देखें ।
जिम के।

6
मुझे लगता है कि आपको minimum_number_should_match = 1इस विचार को लागू करने की आवश्यकता है कि "इनमें से कम से कम एक खंड का मिलान होना चाहिए"।
जिम के।

अच्छा उत्तर! मैं सिर्फ प्रलेखन का एक हिस्सा साझा करना चाहता हूं जो मुझे यह समझने में बहुत मददगार था। elastic.co/guide/en/elasticsearch/guide/current/...
ba0708

1
जिमके - या कोई क्लॉज नहीं होना चाहिए। जब कोई खंड नहीं होना चाहिए, तो न्यूनतम_नंबर_होल्ड_मैच निहित है।
लिज़ह

15

चूँकि यह एक लोकप्रिय प्रश्न है, इसलिए मैं इसे जोड़ना चाहूंगा कि एलिस्टिक्स खोज के संस्करण में 2 चीजें थोड़ी बदल गईं।

filteredक्वेरी के बजाय , किसी को boolशीर्ष स्तर में क्वेरी का उपयोग करना चाहिए ।

यदि आप mustभागों के स्कोर की परवाह नहीं करते हैं , तो उन भागों को filterकुंजी में रखें। नो स्कोरिंग का अर्थ है तेजी से खोज। इसके अलावा, इलास्टिसर्च स्वचालित रूप से यह पता लगाएगा कि क्या उन्हें कैश करना है, आदि must_notकैशिंग के लिए समान रूप से मान्य है।

संदर्भ: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

"gte": "now"मिलीसेकंड ग्रैन्युलैरिटी की वजह से भी, मन को शांत नहीं किया जा सकता। एक mustखंड में दो श्रेणियों का उपयोग करें : एक के साथ now/1hऔर दूसरा जिसके साथ nowपहले को थोड़ी देर के लिए कैश किया जा सकता है और दूसरे को एक छोटे परिणाम सेट पर त्वरित फ़िल्टरिंग के लिए।


8

जैसा कि प्रलेखन में कहा गया है :

चाहिए: मिलान दस्तावेजों में क्लॉज (क्वेरी) दिखाई देना चाहिए।

चाहिए: मिलान दस्तावेज़ में क्लॉज़ (क्वेरी) दिखाई देनी चाहिए। बूलियन क्वेरी में बिना किसी क्लॉस के, एक या अधिक क्लॉज़ को एक दस्तावेज़ से मेल खाना चाहिए। क्लॉज़ टू मैच की न्यूनतम संख्या को न्यूनतम_शोल्डर_मैच पैरामीटर का उपयोग करके सेट किया जा सकता है।

दूसरे शब्दों में, परिणाम से मिलान करना होगा सभी प्रश्नों में पेश करना चाहिए खंड (या मेल खाते हैं कम से कम एक का होना चाहिए खंड अगर कोई जरूरी खंड।

चूंकि आप अपने परिणामों को सभी प्रश्नों को पूरा करना चाहते हैं, इसलिए आपको इसका उपयोग करना चाहिए


आप वास्तव में बूलियन क्वेरी के अंदर फ़िल्टर का उपयोग कर सकते हैं।


10
मुझे लगता है कि आपका मतलब है "आप का उपयोग करना चाहिए" के बजाय "आपको उपयोग करना चाहिए"; ;-)
जर्म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.