ইলাস্টিকসার্ক: "টার্ম", "ম্যাচ ফ্রেস" এবং "কোয়েরি স্ট্রিং" এর মধ্যে পার্থক্য


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ডিফল্টরূপে _ সমস্ত ক্ষেত্রে ক্যোয়ারী অনুসন্ধানে একসাথে বেশ কয়েকটি পাঠ্য ক্ষেত্রের পাঠ্য রয়েছে। তার উপরে, এটি বিশ্লেষণ করে কিছু অপারেটর (ওআর / ওআর ...), ওয়াইল্ডকার্ডস এবং আরও সমর্থন করে ( সম্পর্কিত বাক্য গঠন দেখুন )।

অনুসন্ধান হিসাবে match_phrase, অনুসন্ধান ক্ষেত্রের সেট বিশ্লেষক অনুযায়ী ইনপুটটি বিশ্লেষণ করা হয়।

এর বিপরীতে match_phrase, বিশ্লেষণের পরে প্রাপ্ত পদগুলি একই ক্রমে থাকা উচিত নয়, যদি না ব্যবহারকারী ইনপুটটির চারপাশে উদ্ধৃতি ব্যবহার করে।

উদাহরণস্বরূপ, আগের মতো একই দস্তাবেজগুলি ব্যবহার করে, এই কোয়েরিটি সমস্ত দস্তাবেজকে ফিরিয়ে দেবে:

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

তবে এই ক্যোয়ারী ক্যোয়ারির মতো একই 2 টি নথি ফেরত দেবে match_phrase:

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

এই প্রশ্নের জন্য বিভিন্ন বিকল্প সম্পর্কে আরও অনেক কিছু বলার আছে, দয়া করে সম্পর্কিত ডকুমেন্টেশন একবার দেখুন:

আশা করি এটি যথেষ্ট পরিষ্কার এবং এটি সাহায্য করবে।


দুর্দান্ত, দুর্দান্ত এবং পুরো ব্যাখ্যা! কেবলমাত্র আমি অস্পষ্ট যা হ'ল বিশ্লেষণটি হ'ল বা কী ...
blee908

1
আপনাকে স্বাগতম! :) বিশ্লেষকরা অবশেষে ইনডেক্স / অনুসন্ধান করা শর্তাদি পাওয়ার জন্য পাঠ্যটি প্রক্রিয়াকরণ করেন। ইলাস্টিক অনুসন্ধান সংজ্ঞা নির্দেশিকাটির এই পৃষ্ঠাগুলি পড়ুন কারণ এটি বোঝার জন্য এটি সত্যই একটি গুরুত্বপূর্ণ ধারণা।
টমাসস

1
হ্যাঁ এসকিউএল থেকে আসছে, এখানে অনেক নতুন ধারণা রয়েছে। অনুসন্ধান এবং ফিল্টারগুলির মধ্যে পার্থক্য, সঠিক মান বনাম সম্পূর্ণ পাঠ্য, জেএসওন অনুসন্ধান অবজেক্ট এবং ঠিক যেভাবে ইলাস্টিক অনুসন্ধান এটি অনুসন্ধান চালায়। গ্রহণ করা উচিত !!! রিসোর্সের জন্য ধন্যবাদ!
blee908

1
@ থমাসস যদি আপনার সূচকে {"foo": "হ্যালো সুন্দর বিশ্বের" had থাকে তবে কি এই প্রশ্নের সাথে মিলবে?
ব্যাটম্যাকি

1
matchক্ষেত্র বিশ্লেষণ করা থাকলে বাটম্যাচি একটি ক্যোয়ারী বিশ্লেষক ব্যবহার করুন, তাই হ্যাঁ। ডিফল্টরূপে, এটি নূন্যতম শর্তাদি (প্যারামিটার দেখুন operator) এর সাথে থাকা দস্তাবেজগুলি ফিরিয়ে দেবে এবং আদেশটি গুরুত্বপূর্ণ নয়।
টমাসস

17

আমি মনে করি যে কেউ অবশ্যই স্পষ্টভাবে পার্টিয়াল সন্ধানের ক্ষেত্রে তাদের মধ্যে পার্থক্যগুলি সন্ধান করছে এখানে ডিফল্ট 'স্ট্যান্ডার্ড বিশ্লেষক' নিয়ে আমার বিশ্লেষণটি এখানে রয়েছে : -

মনে করুন, আমাদের কাছে ডেটা রয়েছে: -

name "নাম": "হ্যালো"}

এখন যদি আমরা এল দিয়ে আংশিক অনুসন্ধান করতে চাই ???

টার্ম ক্যোয়ারী বা ম্যাচ ক্যোয়ারী

{"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*" }

ফলাফল দেবে {"নাম": "হ্যালো"} result

উপসংহার - ক্যোয়ারী_স্ট্রিং দুটি টোকেন দিয়ে অনুসন্ধান করতে সক্ষম হয়েছে

-> এখানে টোকেন ইল এবং জেড z


wildcard is able to do partial search with one token only: আরও সুনির্দিষ্টভাবে, wildcardডিফল্ট অনুসারে অনুসন্ধানগুলি কেবলমাত্র keywordক্ষেত্রগুলিতে কাজ করে , যা সংজ্ঞায়িত একক-টোকেন। ক্ষেত্রের বিষয়বস্তুগুলির একাধিক শব্দের সাথে এটির কোনও সম্পর্ক নেই। আপনার ওয়াইল্ডকার্ড ক্যোয়ারিতে "ওজি হ্যালো" মিলবে।
মনিকার সাথে sox
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.