কখন আমার কোনও ক্যোয়ারী বা ফিল্টার বা দুটির কোনও সংমিশ্রণ ব্যবহার করা উচিত তার কোনও বিবরণ দেখতে পাচ্ছি না। তাদের মধ্যে পার্থক্য কী? কেউ দয়া করে ব্যাখ্যা করতে পারেন?
কখন আমার কোনও ক্যোয়ারী বা ফিল্টার বা দুটির কোনও সংমিশ্রণ ব্যবহার করা উচিত তার কোনও বিবরণ দেখতে পাচ্ছি না। তাদের মধ্যে পার্থক্য কী? কেউ দয়া করে ব্যাখ্যা করতে পারেন?
উত্তর:
পার্থক্যটি সহজ: ফিল্টারগুলি ক্যাশে হয় এবং স্কোরগুলিকে প্রভাবিত করে না, সুতরাং কোয়েরির চেয়ে দ্রুত। এখানেও একবার দেখুন । আসুন আমরা জিজ্ঞাসা করি যে কোনও ক্যোয়ারী সাধারণত এমন কিছু যা ব্যবহারকারীরা টাইপ করে এবং অনেকটা অপ্রত্যাশিত, ফিল্টারগুলি ব্যবহারকারীদের অনুসন্ধান ফলাফলকে সংকুচিত করতে সহায়তা করে, উদাহরণস্বরূপ দিকগুলি ব্যবহার করে।
অফিসিয়াল ডকুমেন্টেশন এটাই বলে:
একটি সাধারণ নিয়ম হিসাবে, ফিল্টারগুলি কোয়েরির পরিবর্তে ব্যবহার করা উচিত:
- বাইনারি জন্য হ্যাঁ / কোন অনুসন্ধান
- সঠিক মান সম্পর্কিত প্রশ্নের জন্য
একটি সাধারণ নিয়ম হিসাবে, ক্যালিয়ারগুলি ফিল্টারগুলির পরিবর্তে ব্যবহার করা উচিত:
- সম্পূর্ণ পাঠ্য অনুসন্ধানের জন্য
- যেখানে ফলাফল নির্ভরযোগ্যতার স্কোরের উপর নির্ভর করে
বলুন সূচীতে myindex
তিনটি নথি রয়েছে:
curl -XPOST localhost:9200/myindex/mytype -d '{ "msg": "Hello world!" }'
curl -XPOST localhost:9200/myindex/mytype -d '{ "msg": "Hello world! I am Sam." }'
curl -XPOST localhost:9200/myindex/mytype -d '{ "msg": "Hi Stack Overflow!" }'
ক্যোয়ারী: একটি ডকুমেন্ট কোয়েরির সাথে কতটা ভাল মেলে
hello sam
(কীওয়ার্ড ব্যবহার করে must
)curl localhost:9200/myindex/_search?pretty -d '
{
"query": { "bool": { "must": { "match": { "msg": "hello sam" }}}}
}'
ডকুমেন্টের "Hello world! I am Sam."
চেয়ে বেশি স্কোর বরাদ্দ করা হয়েছে "Hello world!"
, কারণ পূর্বের কোয়েরিতে দুটি শব্দই মিলে। দলিল স্কোর হয়।
"hits" : [
...
"_score" : 0.74487394,
"_source" : {
"name" : "Hello world! I am Sam."
}
...
"_score" : 0.22108285,
"_source" : {
"name" : "Hello world!"
}
...
ফিল্টার: কোনও দস্তাবেজ কোয়েরির সাথে মেলে কিনা
hello sam
(কীওয়ার্ড ব্যবহার করে filter
)curl localhost:9200/myindex/_search?pretty -d '
{
"query": { "bool": { "filter": { "match": { "msg": "hello sam" }}}}
}'
যেগুলি নথিতে থাকে hello
বা হয় sam
তা ফেরত দেওয়া হয়। নথি স্কোর হয় না ।
"hits" : [
...
"_score" : 0.0,
"_source" : {
"name" : "Hello world!"
}
...
"_score" : 0.0,
"_source" : {
"name" : "Hello world! I am Sam."
}
...
একই সাথে আরও কয়েকটি সংযোজন। প্রথমে একটি ফিল্টার প্রয়োগ করা হয় এবং তারপরে ফলাফলগুলি নিয়ে ক্যোয়ারী প্রক্রিয়া করা হয়। প্রতি ডকুমেন্টে বাইনারি ট্রু / মিথ্যা ম্যাচ সঞ্চয় করতে, বিটসেট অ্যারে নামে কিছু ব্যবহার করা হয়। এই বিটসেট অ্যারে স্মৃতিতে রয়েছে এবং এটি দ্বিতীয়বার থেকে ফিল্টারটি জিজ্ঞাসা করা হবে। এইভাবে, বিটসেট অ্যারের ডেটা-কাঠামো ব্যবহার করে, আমরা ক্যাশেড ফলাফলটি ব্যবহার করতে সক্ষম।
এখানে আরও একটি বিষয় লক্ষণীয়, কেবলমাত্র দ্বিতীয় হিট থেকে অনুরোধটি কার্যকর করা হলেই ফিল্টার ক্যাশে তৈরি হয়, আমরা প্রকৃতপক্ষে ক্যাশে সুবিধাটি পাই।
তবে এরপরে আপনি এড়াতে উষ্ণ API ব্যবহার করতে পারেন । আপনি যখন কোনও উষ্ণ API এর বিপরীতে ফিল্টার দিয়ে কোনও ক্যোয়ারী নিবন্ধভুক্ত করবেন, এটি নিশ্চিত করবে যে এটি যখনই সরাসরি আসে তখনই এটি কোনও নতুন বিভাগের বিরুদ্ধে কার্যকর করা হয়। অতএব আমরা প্রথম প্রয়োগ থেকে নিজেই ধারাবাহিক গতি পাব।
মূলত, আপনি যখন স্কোরিং সহ আপনার দস্তাবেজগুলিতে কোনও অনুসন্ধান করতে চান তখন একটি কোয়েরি ব্যবহৃত হয়। এবং ফিল্টারগুলি কোয়েরি ব্যবহার করে প্রাপ্ত ফলাফলের সেটকে সঙ্কুচিত করতে ব্যবহৃত হয়। ফিল্টারগুলি বুলিয়ান।
উদাহরণস্বরূপ বলুন যে আপনার কাছে রেস্তোঁরাগুলির একটি সূচক রয়েছে জুমাটো জাতীয়। এখন আপনি রেস্তোঁরাগুলি অনুসন্ধান করতে চান যা 'পিজ্জা' পরিবেশন করে , যা মূলত আপনার অনুসন্ধানের কীওয়ার্ড।
সুতরাং আপনি "পিজ্জা" সম্বলিত সমস্ত দস্তাবেজ অনুসন্ধান করতে কোয়েরি ব্যবহার করবেন এবং কিছু ফলাফল পাবেন।
এখনই আপনি রেস্তোঁরাগুলির তালিকা চান যা পিজ্জা পরিবেশন করে এবং ন্যূনতম 4.0 এর রেটিং রয়েছে has
সুতরাং আপনাকে যা করতে হবে তা হল আপনার ক্যোয়ারীতে "পিজ্জা" কীওয়ার্ডটি ব্যবহার করুন এবং ৪.০ হিসাবে রেটিংয়ের জন্য ফিল্টার প্রয়োগ করুন।
যা হয় তা হ'ল ফিল্টারগুলি সাধারণত আপনার সূচকে জিজ্ঞাসা করে প্রাপ্ত ফলাফলগুলিতে প্রয়োগ করা হয়।
Filters
-> এই নথিটি কি মিলছে? একটি বাইনারি হ্যাঁ বা কোন উত্তর
Queries
-> এই নথিটি কি মিলছে? এটি কতটা ভাল মেলে? স্কোরিং ব্যবহার করে
ইলাস্টিকসার্কের সংস্করণ 2-এর পরে, ফিল্টার এবং কোয়েরিগুলি একত্রীকরণ করা হয়েছে এবং কোনও কোয়েরি ক্লজ ফিল্টার বা কোয়েরি (প্রসঙ্গে নির্ভর করে) হিসাবে ব্যবহার করা যেতে পারে। সংস্করণ 1 এর মতো, ফিল্টারগুলি ক্যাশে করা হয় এবং স্কোরিংয়ের কোনও বিষয় না থাকলে এটি ব্যবহার করা উচিত।