2013-08-08 8 views
5

{"query":{ "match" : { "content" : "2" } }} सभी दस्तावेज़ों से मेल खाने वाले सटीक (प्रतिस्थापन नहीं) सभी सामग्री से मेल खाता है, लेकिन मैं सामग्री को बिल्कुल 2 होना चाहता हूं, और नहीं, कम नहीं - जावा की स्ट्रिंग की भावना में मेरी आवश्यकता के बारे में सोचें। बराबर होती है।Elasticsearch

इसी प्रकार दूसरी क्वेरी के लिए मैं मेल करना चाहता हूं जब दस्तावेज़ की सामग्री बिल्कुल '3 3' होती है और कुछ भी कम या कम नहीं होती है। {"query":{ "match" : { "content" : "3 3" } }}

मैं एलैस्टिकसेर्च में सटीक (स्ट्रिंग.equals) मिलान कैसे कर सकता हूं?

उत्तर

2

अपने इंडेक्स प्रकार मैपिंग और नमूना डेटा को देखे बिना, इसे सीधे उत्तर देना मुश्किल है - लेकिन मैं कोशिश करूंगा।

बेतकल्लुफ़, मैं कहता हूँ कि हम इस इस जवाब यहाँ (https://stackoverflow.com/a/12867852/382774), जहां आप बस अपने मानचित्रण में not_analyzed को content क्षेत्र के index विकल्प सेट के समान है:

"url" : { 
    "type" : "string", 
    "index" : "not_analyzed" 
} 

संपादित करें: मैं स्पष्ट नहीं था ऊपर दिखाए गए मेरे मूल उत्तर के साथ पर्याप्त है। मैं यह सूचित करते हैं कि आप अपने क्वेरी लिए उदाहरण कोड जोड़ना चाहिए मतलब नहीं था, मैं का मतलब है कि आप अपनी अनुक्रमणिका प्रकार मानचित्रण कि url फ़ील्ड प्रकार string की है और यह अनुक्रमित है, लेकिन विश्लेषण किया नहीं में निर्दिष्ट करने की आवश्यकता (not_analyzed)।

यह एलैस्टिकसेर्च को आपके दस्तावेज़ों को अनुक्रमणित करते समय क्षेत्र (टोकनिंग या टोकन फ़िल्टरिंग) को परेशान नहीं करने के लिए कहता है - बस इसे दस्तावेज़ में मौजूद होने पर इंडेक्स में संग्रहीत करें। मैपिंग्स के बारे में अधिक जानकारी के लिए, पर एक परिचय के लिए http://www.elasticsearch.org/guide/reference/mapping/ देखें और not_analyzed पर निर्दिष्ट के लिए http://www.elasticsearch.org/guide/reference/mapping/core-types/ देखें (टिप: उस पृष्ठ पर इसके लिए खोजें)।

+0

अपने जवाब के लिए धन्यवाद मिला है। तो जेसन पूछताछ के लिए सटीक वाक्यविन्यास क्या है? उदाहरण के लिए '{" क्वेरी ": { " मिलान ": { " सामग्री ":" 2 2 " } }, " सामग्री ": {" प्रकार ":" स्ट्रिंग "," अनुक्रमणिका ":" not_analyzed " } } 'काम नहीं करता है। –

+0

इससे पहले कि आप कोई अनुक्रमण और प्रश्न पूछें, आपको लोचदार खोज में मैपिंग डालना चाहिए: http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/ जब आप डेटा से खोजना शुरू करते हैं ElasticSearch में अभी संग्रहित है, आपको कुछ भी नहीं मिलेगा क्योंकि दस्तावेज़ों का अभी भी 'पुराना' तरीका विश्लेषण किया गया है (उदाहरण के लिए सफेद स्थान पर विभाजित) – jvwilge

2

Official Doc

आप मैच के बजाय फिल्टर का उपयोग करना चाहिए।

{ 
"query" : { 
    "constant_score" : { 
     "filter" : { 
      "term" : { 
       "content" : 2 
      } 
     } 
    } 
} 

और तुम डॉक्स जिनकी सामग्री सटीक 2 है, के बजाय 20 या 2.1