एलिटिक्स खोज: "टर्म", "मैच वाक्यांश" और "क्वेरी स्ट्रिंग" के बीच अंतर।


116

इलियटसर्च के लिए यहां नया है और इन प्रश्नों के बीच अंतर पर बेहतर समझ प्राप्त करने की कोशिश कर रहा है। जहाँ तक मेरा बता सकते हैं, termएक भी शब्द (जरूरतों काम करने के लिए मैच के लिए लोअरकेस जा करने के लिए?) से मेल खाता है, और दोनों match phraseऔर query stringपाठ का एक स्ट्रिंग से मेल खाता।

जवाबों:


226

termक्वेरी एक शब्द से मेल खाता है क्योंकि यह है: मान का विश्लेषण नहीं किया गया है । इसलिए, यह आपके द्वारा अनुक्रमित किए गए के आधार पर नीचा नहीं होना चाहिए।

यदि आपने Bennettसूचकांक समय पर प्रदान किया है और मूल्य का विश्लेषण नहीं किया गया है, तो निम्नलिखित क्वेरी कुछ भी वापस नहीं करेगी:

{
  "query": {
    "term" : { "user" : "bennett" }
  }
}

match_phrase क्वेरी इनपुट का विश्लेषण करेगी यदि एनालाइजर क्वियर फील्ड के लिए परिभाषित किए गए हैं और निम्नलिखित मानदंड से मेल खाते दस्तावेज ढूंढते हैं:

  • सभी नियम फ़ील्ड में दिखाई देने चाहिए
  • उनके पास इनपुट मूल्य के समान क्रम होना चाहिए

उदाहरण के लिए, यदि आप निम्नलिखित दस्तावेजों को standardसूचीबद्ध करते हैं ( क्षेत्र के लिए विश्लेषक का उपयोग करके foo):

{ "foo":"I just said hello world" }

{ "foo":"Hello world" }

{ "foo":"World Hello" }

यह match_phraseक्वेरी केवल पहले और दूसरे दस्तावेज़ लौटाएगी:

{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

query_stringक्वेरी खोज, डिफ़ॉल्ट रूप से, _all फ़ील्ड पर जिसमें एक ही बार में कई टेक्स्ट फ़ील्ड का पाठ होता है। इसके शीर्ष पर, इसे पार्स किया गया है और कुछ ऑपरेटरों (और / या ...), वाइल्डकार्ड्स और इतने पर ( संबंधित सिंटैक्स देखें ) का समर्थन करता है।

match_phraseप्रश्नों के रूप में , इनपुट का विश्लेषण क्वेरिड फ़ील्ड पर निर्धारित विश्लेषक के अनुसार किया जाता है।

match_phraseविश्लेषण के बाद प्राप्त शर्तों के विपरीत , उसी क्रम में नहीं होना चाहिए, जब तक कि उपयोगकर्ता ने इनपुट के आस-पास के उद्धरणों का उपयोग न किया हो।

उदाहरण के लिए, पहले के समान दस्तावेज़ों का उपयोग करके, यह क्वेरी सभी दस्तावेज़ों को वापस कर देगी:

{
  "query": {
    "query_string": {
      "query": "hello World"
    }
  }
}

लेकिन यह क्वेरी क्वेरी के समान 2 दस्तावेज़ match_phraseलौटाएगी:

{
  "query": {
    "query_string": {
      "query": "\"Hello World\""
    }
  }
}

उन प्रश्नों के विभिन्न विकल्पों के बारे में कहने के लिए बहुत कुछ है, कृपया संबंधित प्रलेखन पर एक नज़र डालें:

उम्मीद है कि यह काफी स्पष्ट है और इससे मदद मिलेगी।


महान, अद्भुत और गहन व्याख्या! केवल एक चीज जो मैं स्पष्ट नहीं कर रहा हूं कि वास्तव में एक विश्लेषण क्या है या करता है ...
ब्लो 908

1
आपका स्वागत है :) अंत में अनुक्रमित / खोजे गए शब्दों को प्राप्त करने के लिए एनालाइज़र पाठ को संसाधित करते हैं। ElasticSearch निश्चित गाइड के इन पृष्ठों को पढ़ें क्योंकि यह समझने के लिए एक महत्वपूर्ण अवधारणा है।
थॉमस

1
हाँ, SQL से आ रहा है, यहाँ बहुत सारे नए विचार हैं। प्रश्नों और फ़िल्टर के बीच का अंतर, पूर्ण पाठ बनाम सटीक मान, JSON खोज ऑब्जेक्ट, और जिस तरह से लोचदार खोज निष्पादित कर रहा है, वह खोज है। इतने में लेने के लिए! संसाधन के लिए धन्यवाद!
ब्लेए 908

1
@ThomasC यदि आपके पास {"foo": "नमस्ते सुंदर दुनिया"} आपके सूचकांक में है, तो क्या यह क्वेरी वापस करेगा?
बटामसी

1
matchयदि क्षेत्र का विश्लेषण किया जाता है, तो @batmaci एक क्वेरी विश्लेषक का उपयोग करता है, इसलिए हाँ। डिफ़ॉल्ट रूप से, यह कम से कम एक शब्द (पैरामीटर देखें operator) वाले दस्तावेज़ लौटाएगा और आदेश महत्वपूर्ण नहीं है।
थॉमस

17

मुझे लगता है कि कुछ एक निश्चित रूप से करने के लिए सम्मान के साथ उन दोनों के बीच मतभेद की तलाश में आंशिक खोज यहाँ डिफ़ॉल्ट के साथ अपने विश्लेषण है 'मानक विश्लेषक' : -

मान लीजिए, हमारे पास डेटा है: -

{"नाम": "हैलो"}

अब क्या होगा अगर हम ell के साथ आंशिक खोज करना चाहते हैं ???

शब्द क्वेरी या मिलान क्वेरी

{"term":{"name": "*ell*" }

काम नहीं करेगा, नोटिंग लौटाएगा।

{"term":{"name": "*zz* *ell*" }

काम नहीं करेगा, नोटिंग लौटाएगा।

निष्कर्ष - टर्म या मैच आंशिक खोज करने में सक्षम नहीं है

वाइल्डकार्ड क्वेरी: -

{"wildcard":{"name": "*ell*" }

काम देगा परिणाम {"नाम": "हैलो"}

{"wildcard":{"name": "*zz* *ell*" }

काम नहीं करेगा, नोटिंग लौटाएगा।

निष्कर्ष - वाइल्डकार्ड केवल एक टोकन के साथ आंशिक खोज करने में सक्षम है

क्वेरी स्ट्रिंग :-

{"query_string": {"default_field": "name","query": "*ell*"}

क्या काम देगा परिणाम {"नाम": "हैलो"}

{"query_string": {"default_field": "name","query": "*zz* *ell*" }

कार्य परिणाम देगा {"नाम": "हैलो"}।

निष्कर्ष - query_string दो टोकन के साथ खोज करने में सक्षम है जो दिए गए हैं

-> यहाँ टोकन ell और zz हैं


wildcard is able to do partial search with one token only: अधिक सटीक रूप से, wildcardकेवल keywordफ़ील्ड पर डिफ़ॉल्ट कार्य द्वारा क्वेरी , जो परिभाषा एकल-टोकन द्वारा होती हैं। क्षेत्र सामग्री का एक शब्द से अधिक होने से कोई लेना-देना नहीं है। आपकी वाइल्डकार्ड क्वेरी में, "ऑज़ी हेल्लो" का मिलान होगा।
मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.