Apache Lucene একটি শক্তিশালী এবং জনপ্রিয় ইন্ডেক্সিং এবং সাচিং লাইব্রেরি, যা মূলত টেক্সট-ভিত্তিক ডেটার জন্য ব্যবহৃত হয়। Lucene ডকুমেন্ট ইন্ডেক্স করে এবং তারপরে বিভিন্ন ধরনের কুইরি ব্যবহার করে দ্রুত এবং কার্যকরীভাবে সাচিং করতে সহায়তা করে।
এই টিউটোরিয়ালে, আমরা Lucene Query Types এর মধ্যে জনপ্রিয় কিছু কুইরি টাইপ যেমন BooleanQuery, PhraseQuery, TermQuery, এবং WildcardQuery এর বিস্তারিত ধারণা এবং ব্যবহার উদাহরণ দেখব।
১. TermQuery: একটি নির্দিষ্ট শব্দ বা টার্ম অনুসন্ধান করা
TermQuery হল একটি বেসিক কুইরি যা শুধুমাত্র একটি নির্দিষ্ট টার্ম (শব্দ) অনুসন্ধান করে। এটি সাধারণত একটি শব্দ বা সংখ্যা সঠিকভাবে মেলানোর জন্য ব্যবহৃত হয়। যখন আপনি একটি টার্মের সাথে ইন্ডেক্স করা ডকুমেন্টগুলির মধ্যে কোনো মেলানো তথ্য খুঁজতে চান, তখন TermQuery ব্যবহার করা হয়।
TermQuery উদাহরণ:
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.Query;
public class TermQueryExample {
public static void main(String[] args) {
// Creating a TermQuery to search for the term "java"
Term term = new Term("content", "java");
Query query = new TermQuery(term);
// Now you can use this query with an IndexSearcher to search for documents
}
}
এখানে, TermQuery "java" শব্দটি "content" ফিল্ডে অনুসন্ধান করে।
২. PhraseQuery: একাধিক টার্মের সঠিক ক্রম অনুসন্ধান করা
PhraseQuery হল একটি কুইরি যা একাধিক টার্ম (শব্দ) এর সঠিক ক্রম অনুসন্ধান করে। এটি সাধারণত বাক্য বা প্যারাগ্রাফের সঠিক শব্দের অর্ডার অনুসন্ধান করতে ব্যবহৃত হয়।
PhraseQuery উদাহরণ:
import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Query;
public class PhraseQueryExample {
public static void main(String[] args) {
// Creating a PhraseQuery to search for the phrase "java programming"
PhraseQuery.Builder builder = new PhraseQuery.Builder();
builder.add(new Term("content", "java"));
builder.add(new Term("content", "programming"));
Query query = builder.build();
// Now you can use this query with an IndexSearcher to search for documents
}
}
এখানে, PhraseQuery "java programming" এর সঠিক ক্রম অনুসন্ধান করবে "content" ফিল্ডে।
৩. BooleanQuery: একাধিক কুইরি শর্তের সাথে অনুসন্ধান করা
BooleanQuery হল একটি কুইরি যা একাধিক কুইরিকে যুক্ত করতে ব্যবহৃত হয়। এটি AND, OR, এবং NOT অপারেটর দ্বারা বিভিন্ন কুইরি শর্তকে একত্রিত করতে সক্ষম। এটি শক্তিশালী অনুসন্ধান কৌশল, যেখানে একাধিক শর্তের ভিত্তিতে ডকুমেন্ট অনুসন্ধান করা হয়।
BooleanQuery উদাহরণ:
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.Query;
public class BooleanQueryExample {
public static void main(String[] args) {
// Creating TermQueries
TermQuery termQuery1 = new TermQuery(new Term("content", "java"));
TermQuery termQuery2 = new TermQuery(new Term("content", "programming"));
// Creating a BooleanQuery with AND operator
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(termQuery1, BooleanClause.Occur.MUST);
builder.add(termQuery2, BooleanClause.Occur.MUST);
Query query = builder.build();
// Now you can use this query with an IndexSearcher to search for documents
}
}
এখানে, BooleanQuery দুটি TermQuery যুক্ত করা হয়েছে যেখানে MUST অপারেটর ব্যবহৃত হয়েছে, অর্থাৎ উভয় শর্ত (java এবং programming) মেলাতে হবে।
- BooleanClause.Occur.MUST: শর্তটি অবশ্যই মেলাতে হবে।
- BooleanClause.Occur.SHOULD: শর্তটি হয়তো মেলাতে পারে।
- BooleanClause.Occur.MUST_NOT: শর্তটি মেলানো উচিত নয়।
৪. WildcardQuery: প্যাটার্ন বা ওয়াইল্ডকার্ড চরিত্রের সাথে অনুসন্ধান
WildcardQuery হল একটি কুইরি যা ওয়াইল্ডকার্ড চরিত্র ব্যবহার করে অনুসন্ধান সম্পাদন করে, যেমন * (যেকোনো সংখ্যা বা অক্ষর) এবং ? (একটি অক্ষর)। এটি অনুসন্ধানে আরও নমনীয়তা প্রদান করে, বিশেষত যখন আপনি কিছু অজানা অংশের জন্য অনুসন্ধান করতে চান।
WildcardQuery উদাহরণ:
import org.apache.lucene.index.Term;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.search.Query;
public class WildcardQueryExample {
public static void main(String[] args) {
// Creating a WildcardQuery to search for any term starting with "jav"
WildcardQuery query = new WildcardQuery(new Term("content", "jav*"));
// Now you can use this query with an IndexSearcher to search for documents
}
}
এখানে, WildcardQuery "jav*" দিয়ে যে কোনো টার্ম অনুসন্ধান করবে যা "jav" দিয়ে শুরু হয়, যেমন "java", "javascript", "javac" ইত্যাদি।
৫. Lucene Query Types এর উপকারিতা
- TermQuery: সাধারণ এবং দ্রুত টার্ম ভিত্তিক অনুসন্ধান।
- PhraseQuery: একাধিক শব্দের সঠিক ক্রম অনুসন্ধান।
- BooleanQuery: একাধিক শর্তের ভিত্তিতে অনুসন্ধান, যেমন AND, OR, NOT শর্ত।
- WildcardQuery: প্যাটার্ন বা ওয়াইল্ডকার্ড ব্যবহার করে নমনীয় অনুসন্ধান।
এগুলো দিয়ে আপনি সহজেই টেক্সট অনুসন্ধান করতে পারেন এবং বিভিন্ন ডেটা ফিল্ডের মধ্যে ফলাফল সঠিকভাবে পাবেন।
সারাংশ
Lucene তে বিভিন্ন ধরনের কুইরি টেমপ্লেট এবং অপারেটর ব্যবহার করে অনুসন্ধান কাজ সম্পন্ন করা হয়। TermQuery, PhraseQuery, BooleanQuery, এবং WildcardQuery হল কিছু জনপ্রিয় কুইরি টাইপ যা আপনাকে নির্দিষ্ট শর্তের ভিত্তিতে ডকুমেন্ট খুঁজে পেতে সহায়তা করে। এই কুইরি টাইপগুলি Lucene এর শক্তিশালী অনুসন্ধান সক্ষমতাকে আরও প্রসারিত করে এবং বিভিন্ন টেক্সট ডেটার সাথে সম্পর্কিত কার্যকলাপকে সহজ করে তোলে।
Read more