2013-08-23 5 views
8

वहाँ elasticsearch एपीआई के माध्यम से पता लगाने के लिए एक query string query वास्तव में पार्स किया गया है कोई तरीका है? आप ऐसा कर सकते हैं मैन्युअल रूप से lucene query syntax को देखकर, लेकिन यह वास्तव में अच्छा है अगर आप वास्तविक परिणाम पार्सर है में से कुछ प्रतिनिधित्व पर दिखाई दे सकता है किया जाएगा।elasticsearch को क्वेरी_स्ट्रिंग को पार्स करने का परिणाम कैसे प्राप्त करें?

+1

क्या आपने अपने खोज अनुरोध में व्याख्या = सही जोड़कर समझा उत्पादन को सक्षम करने का प्रयास किया है? – javanna

+1

@javanna समझाने = सच के प्रयोजन के बाद से बस प्रत्येक व्यक्ति के परिणाम की रेटिंग, उसका अनुमान क्या हो रहा है एक छोटे से मदद करता है समझाने के लिए है। लेकिन मैं विशेष रूप से जटिल मामलों के लिए कुछ स्पष्ट करना पसंद करूंगा। –

+1

ठीक है, फिर [मान्य क्वेरी एपीआई] (http://www.elasticsearch.org/guide/reference/api/validate/) पर एक नज़र डालें, और वहां भी व्याख्या करें, बेहतर होना चाहिए। – javanna

उत्तर

5

टिप्पणी में उल्लेख किया javanna के रूप में वहाँ _validate एपीआई। यहाँ अपने स्थानीय लोचदार (संस्करण 1.6) पर काम करता है:

curl -XGET 'http://localhost:9201/pl/_validate/query?explain&pretty' -d' 
{ 
    "query": { 
     "query_string": { 
     "query": "a OR (b AND c) OR (d AND NOT(e or f))", 
     "default_field": "t" 
    } 
    } 
} 
' 

pl मेरी क्लस्टर पर सूचकांक का नाम है। अलग-अलग इंडेक्स में अलग-अलग विश्लेषक हो सकते हैं, यही कारण है कि एक सूचकांक के दायरे में क्वेरी सत्यापन निष्पादित किया जाता है।

ऊपर कर्ल का परिणाम पीछा कर रहा है:

{ 
    "valid" : true, 
    "_shards" : { 
    "total" : 1, 
    "successful" : 1, 
    "failed" : 0 
    }, 
    "explanations" : [ { 
    "index" : "pl", 
    "valid" : true, 
    "explanation" : "filtered(t:a (+t:b +t:c) (+t:d -(t:e t:or t:f)))->cache([email protected]f1)" 
    } ] 
} 

मैंने जान-बूझकर एक OR लोअरकेस बना दिया है और जैसा कि आप विवरण में देख सकते हैं, यह निशानी के रूप में और नहीं एक ऑपरेटर के रूप में व्याख्या की है।

विवरण की व्याख्या के लिए के रूप में। के समान प्रारूप +-query string क्वेरी की operators है:

  • (और) वर्ण आरंभ और समाप्ति bool query
  • + उपसर्ग का मतलब खंड है कि must
  • में होगा - उपसर्ग का मतलब खंड है कि must_not
  • में होगा
  • कोई उपसर्ग का अर्थ यह नहीं है कि यह should (default_operatorOR के बराबर)
,210

तो ऊपर निम्नलिखित के बराबर होगी:

{ 
    "bool" : { 
    "should" : [ 
     { 
     "term" : { "t" : "a" } 
     }, 
     { 
     "bool": { 
      "must": [ 
      { 
       "term" : { "t" : "b" } 
      }, 
      { 
       "term" : { "t" : "c" } 
      } 
      ] 
     } 
     }, 
     { 
     "bool": { 
      "must": { 
       "term" : { "t" : "d" } 
      }, 
      "must_not": { 
      "bool": { 
       "should": [ 
       { 
        "term" : { "t" : "e" } 
       }, 
       { 
        "term" : { "t" : "or" } 
       }, 
       { 
        "term" : { "t" : "f" } 
       } 
       ] 
      } 
      } 
     } 
     } 
    ] 
    } 
} 

मैं _validate एपीआई काफी भारी डिबग परिसर में filtered प्रश्नों कई शर्तों के साथ इस्तेमाल किया। यह विशेष रूप से उपयोगी होता है यदि आप यह जांचना चाहते हैं कि विश्लेषक टोकनयुक्त इनपुट को यूआरएल की तरह कैसे इनपुट करता है या कुछ फिल्टर कैश किया जाता है।

एक शानदार पैरामीटर rewrite भी है जो मुझे अब तक पता नहीं था, जिसके कारण स्पष्टीकरण वास्तविक लुसीन क्वेरी को निष्पादित करने के लिए और अधिक विस्तृत होने का कारण बनता है।

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