2013-05-27 16 views
30

मेरे पास ES में एक बहु-मिलान क्वेरी है, और एक फ़िल्टर जोड़ना चाहता है।लोचदार खोज, फ़िल्टर के साथ बहु मिलान?

{ 
    "multi_match" : { 
    "query" : "this is a test", 
    "fields" : [ "subject^2", "message" ] 
    } 
} 

इस फ़िल्टर को जोड़ने के लिए वाक्यविन्यास क्या है?

मैंने कोशिश की:

{ 
    "multi_match" => { 
    "query" => "list", 
    "fields" => [ "username" ] 

    }, 
"filter" => { 
     "term" => { "username" => "slimkicker"} 
    } 
} 

उत्तर

54

आपको क्या चाहिए आपको उचित स्थिति में फिल्टर डाल करने के लिए है पर निर्भर करता है। आपके पास दो विकल्प: एक शीर्ष स्तर फिल्टर

उपयोग और केवल खोज परिणामों के लिए, लेकिन पहलुओं

{ 
    "query" : { 
     "multi_match" { 
      "query" : "this is a test", 
      "fields" : [ "subject^2", "message" ] 
     } 
    }, 
    "filter" : { 
     "term" : {"username":"slimkicker"} 
    } 
} 

के लिए नहीं किसी फ़िल्टर किए गए क्वेरी का उपयोग करें और दोनों को खोज परिणामों के लिए फ़िल्टर लागू फिल्टर लागू करते हैं और पहलुओं

{ 
    "query" :{ 
     "filtered" : { 
      "query" : { 
       "multi_match" : { 
        "query" : "this is a test", 
        "fields" : [ "subject^2", "message" ] 
       } 
      }, 
      "filter" : { 
       "term" : {"username":"slimkicker"} 
      } 
     } 
    } 
} 
+10

क्या आप दो विकल्पों के बीच अंतर पर थोड़ा और बता सकते हैं? जिसमें मामलों का उपयोग किया जाना चाहिए? –

+1

पक्ष में फ़िल्टर के बारे में दूसरा है जैसे amazon.com उदा। – batmaci

35

Elasticsearch 5 वाक्य रचना के साथ bool क्वेरी, जैसे के उपयोग करने के लिए बदल गया है

{ 
    "from" : 0, 
    "size" : 10, 
    "sort" : "publishDate", 
    "query": { 
    "bool": { 
     "must" : { 
     "multi_match" : { 
      "query":  "wedding", 
      "type":  "most_fields", 
      "fields":  [ "title", "text" ] 
     } 
     }, 
     "filter": { 
     "term": { 
      "locale": "english" 
     } 
     } 
    } 
    } 
} 

प्रलेखन here पाया जा सकता है।

+0

मुझे लगता है कि 2.x.x संस्करण के बाद यह अल्रे है, न केवल 5 – batmaci

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