2015-09-28 5 views
5

पर मैच चाहिए यह संभव है इसन्यूनतम क्वेरी फ़िल्टर किया

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and" 
     } 
     } 
    } 
    } 
"minimum_should_match": "2" बयान के साथ

की तरह एक प्रश्न के लिए?

मुझे पता है कि मैं एक साधारण क्वेरी का उपयोग कर सकता हूं (मैंने कोशिश की है, यह काम करता है) लेकिन मुझे गणना करने के लिए स्कोर की आवश्यकता नहीं है। मेरा लक्ष्य सिर्फ उन दस्तावेजों को फ़िल्टर करना है जिनमें मूल्यों में से 2 शामिल हैं।

क्या स्कोर आमतौर पर दस्तावेज़ को पुनर्प्राप्त करने के लिए आवश्यक समय पर भारी प्रभाव डालता है?

इस क्वेरी का उपयोग करना:

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and", 
      "minimum_should_match": "2" 
     } 
     } 
    } 
    } 

मैं यह त्रुटि आई:

QueryParsingException[[my_db] [terms] filter does not support [minimum_should_match]] 
+1

यदि मैं आपका प्रश्न समझता हूं, तो आप नाम फ़ील्ड में 'अन्ना', 'मार्क' और 'जो' के साथ सभी दस्तावेज ढूंढ रहे हैं, 10% समानता देते हैं या लेते हैं? क्या होता है यदि हमारे पास 'कैथरीन' और 'विल्हेल्मिना' जैसे लंबे नाम हैं जो ठीक से मेल खाते हैं, और आखिरी नाम 'जो' 10% की वजह से पूरी तरह से त्याग दिया गया है? – IanGabes

+0

क्षमा करें शायद मेरा प्रश्न इतना स्पष्ट नहीं था :) मैंने सूची का सबसेट निर्दिष्ट करने के लिए 90% का उपयोग किया है। मैं 2. के साथ संपादन कर रहा हूं, यही है, अन्ना, मार्क और कैथरीन के साथ एक दस्तावेज़ मिलान किया जाना चाहिए। अन्ना, कैथरीन और विल्हेल्मिना के साथ एक दस्तावेज़ मिलान नहीं किया जाना चाहिए। मुख्य मुद्दा यह है कि यदि मैं न्यूनतम उपयोग करता हूं तो फ़िल्टर किए गए प्रश्न के अंदर मेल खाना चाहिए, तो मुझे 'QueryParsingException [[my_db] [terms] फ़िल्टर [minimal_should_match]] का समर्थन नहीं करता है;' – betto86

उत्तर

3

न्यूनतम से मेल खाना चाहिए terms filter के लिए एक पैरामीटर नहीं है। यदि यह कार्यक्षमता आप के लिए देख रहे हैं, मैं इस तरह आपकी क्वेरी पुनर्लेखन सकता है, bool query में लिपटे उपयोग करने के लिए एक query filter:

{ 
    "filter": { 
     "query": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
        "names": "Anna" 
        } 
       }, 
       { 
        "term": { 
        "names": "Mark" 
        } 
       }, 
       { 
        "term": { 
        "name": "Joe" 
        } 
       } 
      ], 
      "minimum_number_should_match": 2 
     } 
     } 
    } 
} 

आप वास्तव में बेहतर मिलान दस्तावेजों तीनों मिल जाएगा, लेकिन क्वेरी भी मिलान कर देंगे तीन शब्दों में से दो के साथ दस्तावेज। must एक निहित है और। हम स्कोर की गणना भी नहीं करते हैं, क्योंकि हमने फ़िल्टर को फ़िल्टर के रूप में निष्पादित किया है।

+0

खोजकिक रैपर का उपयोग कर रेल में इसे लागू करने के लिए कोई सुझाव। – kishore

+1

बूल क्वेरी में 'must' का उपयोग न करें। इसके बजाय 'चाहिए' का उपयोग करें, क्योंकि 'न्यूनतम_number_should_match' केवल लागू होना चाहिए। – AmazingTurtle

संबंधित मुद्दे