Apache Lucene একটি শক্তিশালী ফ্রি এবং ওপেন সোর্স সনাক্তকরণ এবং টেক্সট অনুসন্ধান লাইব্রেরি, যা বড় আকারের টেক্সট ডেটাবেস বা ডকুমেন্ট ইনডেক্সিং এবং অনুসন্ধান করার জন্য ব্যবহৃত হয়। Lucene এর হাইলাইটিং সুবিধা আপনাকে অনুসন্ধান করা শব্দ বা প্যাটার্নগুলি ডকুমেন্টের মধ্যে হাইলাইট করার সুযোগ দেয়, যাতে ইউজাররা তাদের অনুসন্ধান ফলাফল আরও সহজে দেখতে পারে।
এই গাইডে, আমরা Lucene তে Custom Highlighting Techniques এর বিষয়ে আলোচনা করব, যেখানে আপনি কাস্টমাইজড হাইলাইটিং স্টাইল এবং পদ্ধতি তৈরি করতে পারবেন।
১. Lucene Highlighting Overview
Lucene হাইলাইটিং হল একটি প্রক্রিয়া যার মাধ্যমে অনুসন্ধান ফলাফলে পাওয়া কিওয়ার্ড বা প্যাটার্ন গুলি হাইলাইট করা হয়। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি বড় ডেটাসেটে অনুসন্ধান করছেন এবং আপনি চান যে ইউজাররা দ্রুত তাদের অনুসন্ধানের ফলাফল দেখতে পাক।
Lucene হাইলাইটিং সাধারণত Fragmenter, Formatter, এবং Scorer ব্যবহার করে কাজ করে। Fragmenter ডকুমেন্টের টেক্সটকে ছোট ছোট অংশে বিভক্ত করে, এবং Formatter সেই অংশগুলোকে কাস্টমাইজডভাবে প্রদর্শন করে।
২. Lucene Highlighting API
Lucene হাইলাইটিং করতে আপনাকে Highlighter ক্লাসটি ব্যবহার করতে হবে। সাধারণত, Highlighter টেক্সটের মধ্যে কিওয়ার্ডগুলো খুঁজে বের করে এবং তাদের জন্য কাস্টম হাইলাইটিং তৈরি করে।
Highlighter ক্লাসের মৌলিক কনফিগারেশন:
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.*;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.search.highlight.*;
import java.io.IOException;
import java.nio.file.Paths;
public class LuceneHighlightingExample {
public static void main(String[] args) throws Exception {
String queryStr = "searchTerm"; // The term you're searching for
String indexDir = "path/to/index"; // The index directory path
FSDirectory directory = FSDirectory.open(Paths.get(indexDir));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query query = parser.parse(queryStr);
// Highlighter setup
Highlighter highlighter = new Highlighter(new QueryScorer(query));
Formatter formatter = new SimpleHTMLFormatter("<b>", "</b>"); // Use <b> tag for highlighting
highlighter.setTextFragmenter(new SimpleFragmenter(100)); // Fragment size of 100 characters
TopDocs topDocs = searcher.search(query, 10);
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
Document doc = searcher.doc(scoreDoc.doc);
String content = doc.get("content");
// Apply highlighting
String highlightedText = highlighter.getBestFragment(new StandardAnalyzer(), "content", content);
if (highlightedText != null) {
System.out.println("Highlighted: " + highlightedText);
} else {
System.out.println("No highlight found");
}
}
reader.close();
}
}
এখানে:
- QueryScorer এবং SimpleHTMLFormatter ব্যবহার করে, আপনি কিওয়ার্ডগুলোকে
<b>ট্যাগ দিয়ে হাইলাইট করছেন। - SimpleFragmenter সেটআপ করা হয়েছে যাতে ফ্রাগমেন্টের দৈর্ঘ্য ১০০ ক্যারেক্টার হয়।
৩. Custom Highlighting Techniques
Lucene এ কাস্টম হাইলাইটিং করার জন্য আপনি Fragmenter, Formatter, এবং Scorer কাস্টমাইজ করতে পারেন, যা আপনাকে আপনার টেক্সটের হাইলাইটিং প্রক্রিয়াটি আরও বিশেষায়িত এবং নিয়ন্ত্রিতভাবে করতে সাহায্য করবে।
৩.১ Custom Formatter
Formatter হল সেই ক্লাস যা কাস্টম হাইলাইটিং আউটপুট ফরম্যাট তৈরি করে। আপনি Formatter ক্লাস কাস্টমাইজ করে আপনার পছন্দমতো হাইলাইটিং স্টাইল তৈরি করতে পারেন।
উদাহরণস্বরূপ, CustomFormatter ক্লাস তৈরি করতে পারেন যা হাইলাইট করা শব্দগুলোর চারপাশে [highlight] ট্যাগ যুক্ত করবে:
public class CustomFormatter extends Formatter {
@Override
public String highlightTerm(String originalText, TokenGroup tokenGroup) {
StringBuffer highlightedText = new StringBuffer();
for (Token token : tokenGroup.getTokens()) {
highlightedText.append("[highlight]").append(token.getTerm()).append("[/highlight]");
}
return highlightedText.toString();
}
}
এখানে, [highlight] ট্যাগে হাইলাইটিং করা টোকেনগুলোর মধ্যে কাস্টম স্টাইল প্রয়োগ করা হয়েছে।
৩.২ Custom Fragmenter
Fragmenter হল সেই ক্লাস যা কিভাবে টেক্সট ফ্রাগমেন্ট করা হবে তা নির্ধারণ করে। আপনি SimpleFragmenter বা EdgeFragmenter এর মতো স্ট্যান্ডার্ড ফ্রাগমেন্টার ব্যবহার করতে পারেন অথবা নিজস্ব ফ্রাগমেন্টার ক্লাস তৈরি করতে পারেন।
একটি কাস্টম ফ্রাগমেন্টার উদাহরণ:
public class CustomFragmenter extends Fragmenter {
@Override
public String[] getFragments(TokenStream tokenStream) throws IOException {
// Custom logic to fragment text
// You can use custom rules to split the text
return new String[] { "Custom Fragmented Text" };
}
}
এখানে আপনি আপনার টেক্সটের কাস্টম ফ্রাগমেন্টেশন লজিক সংজ্ঞায়িত করতে পারবেন।
৩.৩ Custom Scorer
Scorer ক্লাস ব্যবহার করে আপনি যেভাবে শব্দ বা প্যাটার্ন স্কোর করবেন তা কাস্টমাইজ করতে পারেন। স্কোরার আপনাকে কোনো নির্দিষ্ট প্যাটার্নের জন্য হাইলাইটিংয়ের গুরুত্ব নির্ধারণে সহায়তা করে।
public class CustomQueryScorer extends QueryScorer {
public CustomQueryScorer(Query query) {
super(query);
}
@Override
public float score(int docId, int freq) throws IOException {
// Custom scoring logic
return super.score(docId, freq) * 2; // Example: Double the score for certain terms
}
}
এখানে, কাস্টম স্কোরার ব্যবহার করে আপনি শব্দগুলোর স্কোরিং প্রক্রিয়া কাস্টমাইজ করতে পারেন।
৪. Performance Considerations for Highlighting
Lucene হাইলাইটিং ব্যবহারের সময় পারফরম্যান্সের বিষয়টি লক্ষ্য রাখা জরুরি, বিশেষ করে যখন বিশাল ডেটাসেট বা অনেক অনুসন্ধান শব্দ থাকে। Highlighter ক্লাসের ব্যবহারে বিভিন্ন টেকনিক যেমন Caching, Fragmentation, এবং Scoring অপটিমাইজ করা হতে পারে।
Best Practices:
- Text Fragment Size: ফ্রাগমেন্ট সাইজ কমানো (যেমন ২০০ থেকে ১০০ ক্যারেক্টার) পারফরম্যান্সের জন্য সহায়ক হতে পারে।
- Caching: যদি একাধিক বার একই টেক্সট হাইলাইট করা হয়, তাহলে সেগুলো কেবল একবার প্রসেস করে কেচে রাখা যেতে পারে।
- Limit the Number of Hits: খুব বেশি অনুসন্ধান ফলাফল না আসতে দিন, এতে হাইলাইটিং আরো দ্রুত হবে।
সারাংশ
Lucene Custom Highlighting Techniques বিভিন্ন ধরনের কাস্টমাইজেশন সুযোগ প্রদান করে, যা আপনাকে টেক্সট অনুসন্ধান এবং ফলাফলের মধ্যে হাইলাইটিং প্রক্রিয়াটি আরও নিয়ন্ত্রিত এবং উন্নত করতে সাহায্য করে। আপনি Formatter, Fragmenter, এবং Scorer ক্লাস কাস্টমাইজ করে আপনার প্রয়োজন অনুযায়ী হাইলাইটিং স্টাইল তৈরি করতে পারেন, যা টেক্সট ফরম্যাটিং এবং ডেটা প্রদর্শনে শক্তিশালী ফিচার প্রদান করে।
Lucene এর কাস্টম হাইলাইটিং কৌশল আপনার প্রোজেক্টের টেক্সট অনুসন্ধান ফলাফলে আরও মানসম্পন্ন এবং সহজে ব্যবহৃত হাইলাইটিং ফিচার তৈরি করতে সহায়ক।
Read more