Elasticsearch Query DSL (Domain Specific Language) হলো একটি JSON-ভিত্তিক ভাষা, যা Elasticsearch এ ডেটা অনুসন্ধান এবং ফিল্টার করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন ধরনের query এবং ফিল্টার ব্যবহার করে ডকুমেন্ট অনুসন্ধান, ফিল্টারিং, এবং ডেটা বিশ্লেষণ করতে সাহায্য করে। Query DSL এর মাধ্যমে আপনি খুব সহজে কমপ্লেক্স সার্চ কন্ডিশন তৈরি করতে পারেন। নিচে এর বেসিক ধারণা ও কাঠামো নিয়ে আলোচনা করা হলো:
Query DSL এর দুটি প্রধান ক্যাটাগরি
- Leaf Query Clauses: এই ধরণের query ফিল্ডের একটি নির্দিষ্ট মান খোঁজার চেষ্টা করে। যেমন:
term,match, এবংrangeইত্যাদি। - Compound Query Clauses: এটি একাধিক query ক্লজকে একত্রিত করে আরও জটিল সার্চ লজিক তৈরি করে। যেমন:
bool,dis_max, এবংconstant_scoreইত্যাদি।
Leaf Query Clauses
Leaf query গুলো সরাসরি ডকুমেন্টের ফিল্ডের উপর অপারেশন করে। এগুলো সাধারণত নির্দিষ্ট একটি মান (value) এর উপর ভিত্তি করে ফিল্টার বা সার্চ করে। কিছু সাধারণ Leaf query উদাহরণ:
Match Query:
- এটি একটি টেক্সট ফিল্ডে ম্যাচ করার জন্য ব্যবহৃত হয় এবং এটি টোকেনাইজড করে সার্চ করে।
- উদাহরণ:
- উপরের উদাহরণে,
descriptionফিল্ডে"full text search"এর সাথে মিলে যায় এমন ডকুমেন্টগুলো রিটার্ন হবে।
{
"query": {
"match": {
"description": "full text search"
}
}
}
Term Query:
- এটি এক্স্যাক্ট টার্ম ম্যাচ করার জন্য ব্যবহৃত হয়, যা সাধারণত সংখ্যা বা কীওয়ার্ডের মতো ডেটার জন্য উপযুক্ত।
- উদাহরণ:
{
"query": {
"term": {
"status": "published"
}
}
}
Range Query:
- এটি নির্দিষ্ট মানের পরিসীমার মধ্যে থাকা ডেটা খুঁজে পেতে ব্যবহৃত হয়। যেমন সংখ্যা বা তারিখের মধ্যে সার্চ করা।
- উদাহরণ:
{
"query": {
"range": {
"price": {
"gte": 100,
"lte": 500
}
}
}
}
Compound Query Clauses
Compound query গুলো একাধিক query কে একত্রিত করে আরও জটিল কন্ডিশন তৈরি করতে ব্যবহৃত হয়। কিছু সাধারণ compound query উদাহরণ:
Bool Query:
- এটি বিভিন্ন query কে একত্রিত করে লজিক্যাল অপারেশন (AND, OR, NOT) পরিচালনা করতে ব্যবহৃত হয়।
- উদাহরণ:
- এখানে,
mustঅংশে দুটিmatchquery এবংfilterঅংশে একটিrangequery আছে। সবগুলো কন্ডিশন পূরণ করতে হবে ডকুমেন্ট ম্যাচ করতে।
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "category": "search engine" }}
],
"filter": [
{ "range": { "date": { "gte": "2023-01-01" }}}
]
}
}
}
Dis Max Query:
- এটি বিভিন্ন query থেকে সর্বোচ্চ স্কোর পাওয়া ডকুমেন্টগুলোকে রিট্রিভ করতে ব্যবহৃত হয়।
- উদাহরণ:
{
"query": {
"dis_max": {
"queries": [
{ "match": { "title": "Elasticsearch" }},
{ "match": { "description": "full text search" }}
],
"tie_breaker": 0.3
}
}
}
Constant Score Query:
- এটি একটি ফিক্সড স্কোর দিয়ে query রেজাল্ট রিট্রিভ করে। এটি নির্দিষ্ট মানের ফিল্টারিং করার জন্য বেশ কার্যকর।
- উদাহরণ:
{
"query": {
"constant_score": {
"filter": {
"term": { "status": "published" }
},
"boost": 1.5
}
}
}
Query DSL এর অন্যান্য গুরুত্বপূর্ণ অংশ
- Filtering:
- Query DSL এ filtering এর মাধ্যমে আপনি ডকুমেন্ট গুলো ফিল্টার করে নির্দিষ্ট subset তৈরি করতে পারেন। এটি সাধারনত
boolquery এর মধ্যেfilterক্লজ হিসেবে ব্যবহৃত হয়।
- Query DSL এ filtering এর মাধ্যমে আপনি ডকুমেন্ট গুলো ফিল্টার করে নির্দিষ্ট subset তৈরি করতে পারেন। এটি সাধারনত
- Aggregation:
- এটি ডেটা এনালাইসিস করার জন্য ব্যবহার হয়, যেমন ডেটা গ্রুপ করে কাউন্ট করা, গড় বের করা, সর্বোচ্চ বা সর্বনিম্ন মান খোঁজা ইত্যাদি।
উপসংহার
Elasticsearch Query DSL এর মাধ্যমে আপনি বিভিন্ন ধরনের query তৈরি করতে পারবেন যা খুবই ফ্লেক্সিবল এবং পাওয়ারফুল। Query DSL এর বেসিক ধারণা ও কাঠামো ভালোভাবে বুঝে আপনি খুব সহজেই জটিল সার্চ কন্ডিশন তৈরি করতে এবং ডেটা ফিল্টারিং ও এনালাইসিস করতে পারবেন।