2011-12-19 11 views
6

से लोचदार खोज डीएसएल क्वेरी मैं Elasticsearch के लिए नया हूँ। मुझे नहीं लगता कि मैं क्वेरी और फिल्टर की अवधारणा को पूरी तरह से समझता हूं। मेरे मामले में मैं सिर्फ फिल्टर का उपयोग करना चाहता हूं क्योंकि मैं स्कोरिंग जैसी अग्रिम सुविधा का उपयोग नहीं करना चाहता हूं।एसक्यूएल स्टेटमेंट

मैं निम्नलिखित SQL कथन को elasticsearch क्वेरी में कैसे परिवर्तित करूं?

SELECT * FROM advertiser 
WHERE company like '%com%' 
AND sales_rep IN (1,2) 

क्या मैं अब तक है:

curl -XGET 'localhost:9200/advertisers/advertiser/_search?pretty=true' -d ' 
{ 
    "query" : { 
     "bool" : { 
      "must" : { 
       "wildcard" : { "company" : "*com*" } 
      } 
     } 
    }, 
    "size":1000000 

}' 

मैं कैसे sales_rep मैदान पर या फिल्टर जोड़ने के लिए?

धन्यवाद

उत्तर

2

अपने जरूरी खंड के बाद एक "चाहिए" खंड जोड़ें। एक बूल क्वेरी में, एक या अधिक खंडों को डिफ़ॉल्ट रूप से मेल खाना चाहिए। दरअसल, आप किसी भी संख्या के लिए "minimal_number_should_match" सेट कर सकते हैं, bool query docs देखें।

आपके मामले में, यह काम करना चाहिए।

"should" : [ 
     { 
      "term" : { "sales_rep_id" : "1" } 
     }, 
     { 
      "term" : { "sales_rep_id" : "2" } 
     } 
    ], 

वही अवधारणा बूल फ़िल्टर के लिए काम करती है। बस "क्वेरी" को "फ़िल्टर" में बदलें। बूल फ़िल्टर डॉक्स here हैं।

0

मैं फिर भी इस पोस्ट 4 साल बहुत देर हो चुकी पार चलो ...

, शायद निम्नलिखित कोड उपयोगी हो सकता है ...

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "company": "*com*" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "terms": { 
       "sales_rep_id": [ "1", "2" ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
संबंधित मुद्दे