2014-04-18 14 views
46

मैं "request.method" के लिए मिलान क्वेरी खोज का उपयोग बनाम: "GET": जैसा कि नीचे दिखायाelasticsearch मैच अवधि क्वेरी

{ 
     "query": { 
     "filtered": { 
      "query": { 
      "match": { 
       "request.method": "GET" 
      } 
      }, 
      "filter": { 
      "bool": { 
       "must": [ 
... 

के रूप में की उम्मीद, मैच क्वेरी परिणाम प्राप्त कर सकते हैं,:

enter image description here

लेकिन सवाल यह है कि टर्म क्वेरी का उपयोग करते समय, कोई परिणाम नहीं होता है।

अद्यतन क्वेरी "मैच" से "शब्द" बदलने के लिए, और अन्य हिस्सा रखने के रहने के लिए एक ही करने के लिए:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "term": { 
      "request.method": "GET" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "must": [ 
... 

मुझे लगता है कि टर्म क्वेरी "विश्लेषण किया नहीं" मिलान क्वेरी का संस्करण है । जैसा कि उपरोक्त चित्र में दिखाया गया है, कम से कम एक रिकॉर्ड में "request.method" "GET" के बराबर है। उपरोक्त उल्लिखित अवधि के लिए कोई परिणाम क्यों नहीं है? धन्यवाद।

enter image description here

+4

शब्द पूछताछ में निम्न मामले –

+1

पर 'get' निर्दिष्ट करने का प्रयास करें। आपको बिंदु मिलता है। धन्यवाद। – Linlin

उत्तर

61

प्रयोग कर रहे हैं जब सूचकांक में संग्रहीत Standard AnalyzerGETget हो जाता है मान लिया जाये कि। स्रोत दस्तावेज़ में अभी भी मूल "GET" होगा।

match क्वेरी खोज शब्द के लिए समान मानक विश्लेषक लागू करेगी और इसलिए सूचकांक में संग्रहीत मिलान से मेल खाएगा। term क्वेरी किसी भी विश्लेषक को खोज शब्द पर लागू नहीं करती है, इसलिए केवल उलटा इंडेक्स में उस सटीक शब्द की तलाश होगी।

अपने उदाहरण में शब्द की अवधि का उपयोग करने के लिए, ऊपरी केस "प्राप्त करें" को कम करें "प्राप्त करें" में बदलें या अपना मैपिंग बदलें ताकि request.method फ़ील्ड not_analyzed पर सेट हो।

+0

या 'request.method' फ़ील्ड के लिए मैपिंग को 'कीवर्ड' टाइप करने के लिए बदलें – Johanneke

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