2015-10-05 7 views
20

में कोई फ़ील्ड मौजूद है, यह एक बहुत ही बेवकूफ सवाल हो सकता है, यह जांचने का सबसे अच्छा तरीका क्या है कि लोचदार खोज में किसी दस्तावेज़ का क्षेत्र मौजूद है या नहीं? मुझे दस्तावेज़ीकरण में कुछ भी नहीं मिला।यह जांचने का सबसे अच्छा तरीका है कि कोई एलियास्टसीर्च दस्तावेज़

उदाहरण के लिए यदि इस दस्तावेज़ में फ़ील्ड/कुंजी "कीमत" नहीं है तो मैं परिणाम में वापस नहीं आना चाहता हूं।

{ "अद्यतन": "2015/09/17 11:27:27", "नाम", "आई शैडो", "प्रारूप": "1.5 ग्राम/0.05 आउंस", }

मैं क्या कर सकता हूं?

धन्यवाद

उत्तर

30

आप exists filter एक bool/must filter इस तरह के साथ संयुक्त का उपयोग कर सकते हैं:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "exists": { 
       "field": "price" 
       } 
      }, 
      ...  <-- your other constraints, if any 
      ] 
     } 
     } 
    } 
    } 
} 

तुम भी उपयोग कर सकते हैं missing filter के साथ एक bool/must_not filter संयुक्त:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must_not": [ 
      { 
       "missing": { 
       "field": "price" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

जा सकते हैं लेकिन मौजूद एसक्यूएल के शून्य है पसंद नहीं है? यदि "फ़ील्ड" की जांच नहीं करता है तो यह फ़ील्ड के मान की जांच करता है। शायद मैंने दस्तावेज़ों को गलत समझा है। @Val –

+0

यदि आपके दस्तावेज़ में 'price' फ़ील्ड नहीं है, तो उसके पास' मूल्य' मान नहीं हो सकता है, इसलिए 'price' फ़ील्ड के बिना दस्तावेज़ मिलान नहीं किया जाएगा। – Val

+0

@EkaitzHernandezTroyas क्या आप इसे आजमा सकते हैं? कोइ भाग्य? – Val

8

आप उपयोग कर सकते हैं मौजूद फ़िल्टर:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "exists": { 
      "field": "status" 
     } 
     }, 
     "query": { 
     "match_all": {} 
     } 
    } 
    } 
} 

सादर, एलेन

7

exists फिल्टर, ES 2.1 से existsक्वेरी ने ले लिया है, हालांकि यह के काम में ही है। साथ ही, गायब फ़िल्टर हटा दिया गया है और गायब क्वेरी गायब हो गई है।

जो एक विशेष क्षेत्र है सभी डॉक्स,

"bool": { 
    "must": { 
     "exists": { 
      "field": "my_field" 
     } 
    } 
} 

और सभी दस्तावेज़ जो किसी विशेष फ़ील्ड नहीं है, प्राप्त करने के लिए प्राप्त करने के लिए, इस

"bool": { 
    "must_not": { 
     "exists": { 
      "field": "my_field" 
     } 
    } 
} 

लचीला दस्तावेज़ जैसे must_not के साथ उपयोग करें: https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html

+0

यह कार्य 1 में नहीं है।एक्स भी साथ? – danatcofo

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

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