Apache Lucene হল একটি শক্তিশালী ওপেন সোর্স ইন্ডেক্সিং এবং সার্চ লাইব্রেরি যা দ্রুত এবং দক্ষ সার্চ অপারেশন পরিচালনা করতে ব্যবহৃত হয়। এটি প্রধানত text searching এর জন্য ব্যবহৃত হয়, তবে এটি অনেক ধরনের ডেটার জন্য সার্চ সমাধান প্রদান করে। Result Ranking এবং Custom Scoring লুসিনের গুরুত্বপূর্ণ বৈশিষ্ট্য, যার মাধ্যমে সার্চ রেজাল্টের গুণগত মান উন্নত করা হয়।
এই গাইডে, আমরা দেখব কীভাবে Lucene ব্যবহার করে Result Ranking এবং Custom Scoring প্রক্রিয়া সম্পাদন করা যায়।
১. Lucene Indexing এবং Searching এর মূল ধারণা
Lucene তে ইন্ডেক্স এবং সার্চিং একটি শক্তিশালী পদ্ধতি যা ব্যবহারকারীর কুয়েরি অনুযায়ী ডেটা খুঁজে বের করতে সাহায্য করে। এটি Inverted Indexing ব্যবহার করে, যেখানে প্রতিটি শব্দের জন্য একটি ইনডেক্স তৈরি করা হয় এবং এটি দ্রুত সার্চ রেজাল্ট পাওয়ার জন্য ব্যবহৃত হয়।
Indexing (ইন্ডেক্সিং):
Lucene ইন্ডেক্সিংয়ের মাধ্যমে ডকুমেন্টগুলির মধ্যে থেকে Term এর মেমরি মডেল তৈরি করে যা সার্চিংয়ে ব্যবহৃত হয়। এই ইন্ডেক্সটিতে শব্দের উপস্থিতি এবং প্রতিটি শব্দের অবস্থান সংরক্ষিত থাকে।
Searching (সার্চিং):
Lucene সার্চ অপারেশন চলানোর জন্য কুয়েরি (Query) ব্যবহার করে ইন্ডেক্সের মধ্যে শব্দের জন্য অনুসন্ধান করে এবং রেটিং বা স্কোরিং এর মাধ্যমে সবচেয়ে প্রাসঙ্গিক রেজাল্ট প্রদান করে।
২. Lucene Query Types এর ধারণা
Lucene তে বিভিন্ন ধরনের কুয়েরি আছে যা সার্চ রেজাল্টের নির্ভুলতা এবং কার্যকারিতা বাড়ায়। কিছু সাধারণ কুয়েরি টাইপ হলো:
- Term Query: একক শব্দ অনুসন্ধান।
- Phrase Query: একাধিক শব্দের মধ্যে সঠিক ক্রমে মিল খোঁজা।
- Boolean Query: বিভিন্ন কুয়েরি একত্রিত করে অনুসন্ধান (AND, OR, NOT)।
- Range Query: একটি নির্দিষ্ট রেঞ্জের মধ্যে ফলাফল অনুসন্ধান করা।
৩. Lucene Result Ranking এবং Custom Scoring
Result Ranking এবং Custom Scoring হল সেই প্রক্রিয়া যা সার্চ রেজাল্টের মান নির্ধারণ করে। সাধারণত, Lucene একটি TF-IDF (Term Frequency - Inverse Document Frequency) মডেল ব্যবহার করে রেজাল্ট র্যাংকিং এবং স্কোরিং সম্পন্ন করে, যেখানে প্রতিটি শব্দের frequency এবং তার document frequency (বা inverse document frequency) নির্ধারণ করা হয়।
Custom Scoring:
Lucene আপনাকে Custom Scoring নির্ধারণ করার সুযোগ দেয়, যেখানে আপনি নির্দিষ্ট কুয়েরি বা স্কোরিং ফাংশন অনুযায়ী স্কোর কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, আপনি একটি নির্দিষ্ট শব্দের গুরুত্ব বাড়াতে বা কমাতে পারেন।
৩.১ Result Ranking এর উদাহরণ
Lucene ডিফল্টভাবে TF-IDF স্কোরিং ব্যবস্থার মাধ্যমে রেজাল্ট র্যাংকিং করে। তবে, যদি আপনি কাস্টম স্কোরিং ব্যবহারের মাধ্যমে রেজাল্ট র্যাংকিং কাস্টমাইজ করতে চান, তাহলে আপনাকে Custom Similarity ক্লাস তৈরি করতে হবে।
Custom Scoring Example:
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Similarity;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.index.LeafReaderContext;
public class CustomSimilarity extends Similarity {
@Override
public float score(int doc, float freq) {
// Custom scoring logic based on term frequency (freq)
return freq * 2; // Example: Doubling the term frequency as a custom factor
}
@Override
public Explanation explain(LeafReaderContext context, int doc) {
// Explanation for scoring
return Explanation.match(1.0f, "Custom scoring explanation");
}
@Override
public float idf(long docFreq, long numDocs) {
// Use default idf logic or implement custom
return super.idf(docFreq, numDocs);
}
@Override
public float lengthNorm(String fieldName, int numTerms) {
// Normalize the length of the field
return super.lengthNorm(fieldName, numTerms);
}
}
এখানে, CustomSimilarity ক্লাস একটি কাস্টম স্কোরিং কৌশল তৈরি করে যেখানে আমরা term frequency (freq) এর উপর ভিত্তি করে স্কোরিং পরিবর্তন করেছি।
Using Custom Similarity in a Query:
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.index.Term;
public class CustomScoringExample {
public static void main(String[] args) throws Exception {
// Create an index searcher
IndexSearcher searcher = new IndexSearcher(IndexReader.open(directory));
// Create a query
Query query = new TermQuery(new Term("content", "lucene"));
// Set the custom similarity
searcher.setSimilarity(new CustomSimilarity());
// Search and get top documents
TopDocs topDocs = searcher.search(query, 10);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
System.out.println("Doc ID: " + scoreDoc.doc + ", Score: " + scoreDoc.score);
}
}
}
এখানে, searcher.setSimilarity(new CustomSimilarity()) লাইনটি কাস্টম স্কোরিং ফাংশন সেট করে এবং অনুসন্ধানের ফলাফলকে কাস্টম স্কোরের ভিত্তিতে র্যাংক করা হয়।
৪. Lucene Query and Custom Scoring: Complete Example
এই উদাহরণে, আমরা একটি BooleanQuery এবং CustomSimilarity ব্যবহার করছি, যাতে সার্চ রেজাল্ট র্যাংকিং কাস্টমাইজ করা যায়:
import org.apache.lucene.search.*;
import org.apache.lucene.index.*;
import org.apache.lucene.store.*;
import org.apache.lucene.document.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
public class LuceneSearchWithCustomScoring {
public static void main(String[] args) throws Exception {
// Open a directory
Directory directory = FSDirectory.open(Paths.get("index"));
// Create an index reader and searcher
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
// Apply custom similarity
searcher.setSimilarity(new CustomSimilarity());
// Create a boolean query
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
booleanQuery.add(new TermQuery(new Term("content", "lucene")), BooleanClause.Occur.MUST);
booleanQuery.add(new TermQuery(new Term("content", "search")), BooleanClause.Occur.MUST);
// Perform the search
TopDocs results = searcher.search(booleanQuery.build(), 10);
// Print the results
for (ScoreDoc doc : results.scoreDocs) {
Document document = searcher.doc(doc.doc);
System.out.println("Doc ID: " + doc.doc + ", Score: " + doc.score);
System.out.println("Content: " + document.get("content"));
}
}
}
এই উদাহরণে, আমরা BooleanQuery এবং CustomSimilarity ব্যবহার করছি। সার্চ ফলাফলগুলোর স্কোর কাস্টম লজিক অনুযায়ী নির্ধারণ হবে।
সারাংশ
Lucene তে Result Ranking এবং Custom Scoring ব্যবহারের মাধ্যমে আপনি আপনার সার্চ রেজাল্টগুলির প্রাসঙ্গিকতা এবং গুরুত্ব কাস্টমাইজ করতে পারেন। CustomSimilarity ক্লাস তৈরি করে আপনি নির্দিষ্ট কুয়েরি বা ডকুমেন্টের উপর ভিত্তি করে স্কোরিং এবং র্যাংকিং লজিক পরিবর্তন করতে পারবেন। এই কাস্টম স্কোরিং আপনি Term Frequency, Document Frequency বা অন্য কোনো কাস্টম লজিকের ভিত্তিতে করতে পারেন।
Lucene তে কাস্টম স্কোরিং এবং র্যাংকিং কার্যক্রম আপনার সার্চ ফিচারের কার্যকারিতা বাড়াতে এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে সহায়ক।
Read more