Lucene একটি শক্তিশালী এবং জনপ্রিয় ওপেন সোর্স লাইব্রেরি যা মূলত টেক্সট ডেটা ইন্ডেক্সিং এবং সার্চিংয়ের জন্য ব্যবহৃত হয়। এটি Java ভিত্তিক এবং খুব দ্রুত তথ্য অনুসন্ধান করতে সক্ষম। যখন আপনি Lucene ব্যবহার করে কোনো টেক্সট ডেটাতে সার্চ করেন, তখন কখনও কখনও আপনি চান যে সার্চ করা শব্দগুলো (Search Terms) হাইলাইট করা হোক যাতে ব্যবহারকারী সহজে দেখতে পারে কোথায় তার সার্চ শব্দটি পাওয়া গেছে। Lucene তে এই কাজটি Highlighter ক্লাস ব্যবহার করে করা হয়।
এই টিউটোরিয়ালে, আমরা Lucene Highlighter ক্লাসের মাধ্যমে কিভাবে সার্চ শব্দগুলো হাইলাইট করা যায়, তা আলোচনা করব।
১. Lucene Highlighter Overview
Lucene এর Highlighter ক্লাস ব্যবহার করে আপনি যে টেক্সট ডকুমেন্টে সার্চ করছেন, সেখানে সার্চ শব্দগুলোর অবস্থান শনাক্ত করতে পারবেন এবং ওই শব্দগুলো হাইলাইট করতে পারবেন। এটি সাধারণত একটি Query এর ফলস্বরূপ প্রাপ্ত ডকুমেন্টের মধ্যে সার্চ শব্দগুলোকে স্পষ্টভাবে দেখানোর জন্য ব্যবহৃত হয়।
Lucene Highlighter ক্লাস মূলত Fragmenter এবং Formatter ব্যবহার করে কাজ করে:
- Fragmenter: এটি ডকুমেন্টের টেক্সটটিকে ছোট অংশে (fragments) ভাগ করে, যাতে হাইলাইটিং শুধুমাত্র প্রাসঙ্গিক অংশে করা হয়।
- Formatter: এটি হাইলাইট করা অংশকে নির্দিষ্ট ফরম্যাটে প্রক্রিয়া করে, যেমন HTML ট্যাগে রূপান্তর করা।
২. Lucene Highlighter ব্যবহার করার জন্য প্রয়োজনীয় ডিপেনডেন্সি
Lucene Highlighter ব্যবহার করতে আপনার pom.xml ফাইলে Lucene Core ডিপেনডেন্সি যোগ করতে হবে।
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>8.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>8.11.0</version>
</dependency>
</dependencies>
এখানে, lucene-core এবং lucene-highlighter ডিপেনডেন্সি ব্যবহার করা হয়েছে।
৩. Lucene Highlighter ক্লাসে সার্চ টার্ম হাইলাইট করার উদাহরণ
ধরা যাক, আমাদের কাছে কিছু ডকুমেন্ট রয়েছে, এবং আমরা Lucene সার্চ ইঞ্জিন ব্যবহার করে একটি টেক্সট ডকুমেন্টে অনুসন্ধান করতে চাই এবং যে শব্দটি খুঁজে পেয়েছি, সেটি হাইলাইট করতে চাই।
৩.১ Indexing Data
প্রথমে, আমাদের ডেটা ইনডেক্স করতে হবে। নিচে একটি উদাহরণ দেয়া হলো যেখানে Lucene IndexWriter ব্যবহার করে ডেটা ইনডেক্স করা হয়েছে।
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import java.io.IOException;
import java.nio.file.Paths;
public class LuceneIndexer {
public static void main(String[] args) throws IOException {
// Directory where the index will be stored
Directory directory = FSDirectory.open(Paths.get("indexDirectory"));
// Create IndexWriter
IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
IndexWriter writer = new IndexWriter(directory, config);
// Create a new Document
Document doc = new Document();
doc.add(new TextField("content", "Lucene is a powerful search engine library", Field.Store.YES));
// Add document to the index
writer.addDocument(doc);
// Commit changes and close
writer.commit();
writer.close();
}
}
এই কোডের মাধ্যমে, আমরা একটি টেক্সট ইনডেক্স করেছি যেখানে "Lucene is a powerful search engine library" টেক্সট রয়েছে।
৩.২ Searching and Highlighting the Search Term
এখন আমরা ইনডেক্সের মধ্যে সার্চ করে, আমাদের সার্চ শব্দ "Lucene" কে হাইলাইট করব। আমরা Lucene Highlighter ক্লাস ব্যবহার করব হাইলাইটিং করার জন্য।
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.*;
import java.io.IOException;
import java.nio.file.Paths;
import org.apache.lucene.store.FSDirectory;
public class LuceneSearcher {
public static void main(String[] args) throws Exception {
// Directory where the index is stored
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get("indexDirectory")));
IndexSearcher searcher = new IndexSearcher(reader);
// Create a query to search the term "Lucene"
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query query = parser.parse("Lucene");
// Search the index
TopDocs results = searcher.search(query, 10);
// Initialize Highlighter
Formatter formatter = new SimpleHTMLFormatter("<b>", "</b>");
Fragmenter fragmenter = new SimpleFragmenter(50); // Fragment size of 50 characters
Highlighter highlighter = new Highlighter(formatter, fragmenter);
// Process the hits and highlight the term "Lucene"
for (int i = 0; i < results.scoreDocs.length; i++) {
int docId = results.scoreDocs[i].doc;
Document doc = searcher.doc(docId);
String text = doc.get("content");
TokenStream tokenStream = TokenSources.getAnyTokenStream(reader, docId, "content", new StandardAnalyzer());
String highlightedText = highlighter.getBestFragment(tokenStream, text);
// Output the highlighted result
if (highlightedText != null) {
System.out.println("Highlighted: " + highlightedText);
} else {
System.out.println("No Highlighted Text Found");
}
}
// Close the index reader
reader.close();
}
}
এখানে:
- Formatter: এটি হাইলাইট করা অংশের ফরম্যাট নির্ধারণ করে (এখানে
<b>এবং</b>ব্যবহার করা হয়েছে)। - Fragmenter: এটি ডকুমেন্টের মধ্যে টেক্সট ভাগ করে, যাতে শুধু সংশ্লিষ্ট অংশটিই হাইলাইট হয় (এখানে ৫০ ক্যারেক্টারের ফ্র্যাগমেন্ট ব্যবহার করা হয়েছে)।
- Highlighter: এটি Formatter এবং Fragmenter এর মাধ্যমে সার্চ টার্ম হাইলাইট করে।
এখন, যদি আমরা "Lucene" শব্দটি খুঁজে পাই, তাহলে এটি বোল্ড করে (যেমন <b>Lucene</b>) দেখাবে।
৪. Lucene Highlighter এর উপকারিতা
- User-friendly Search Results: সার্চ শব্দগুলো হাইলাইট করার মাধ্যমে ব্যবহারকারীরা দ্রুত এবং সহজে প্রয়োজনীয় তথ্য খুঁজে পেতে পারে।
- Performance: Lucene Highlighter compile-time এ কাজ করে, ফলে এটি দ্রুত এবং কার্যকর।
- Customization: আপনি সহজেই হাইলাইটিং ফরম্যাট এবং ফ্র্যাগমেন্ট আকার কাস্টমাইজ করতে পারেন।
সারাংশ
Lucene Highlighter ক্লাস ব্যবহার করে আপনি সার্চ টার্মগুলোর হাইলাইটিং করতে পারেন, যা ব্যবহারকারীদের জন্য খুবই উপকারী। এই প্রক্রিয়ায় Formatter এবং Fragmenter ব্যবহার করে আপনি সার্চ টার্মের অবস্থান শনাক্ত করতে এবং হাইলাইট করতে পারেন। Lucene Highlighter সরল ও কার্যকরী উপায়ে হাইলাইটিং ফিচার প্রদান করে, যা অনেক সার্চ অ্যাপ্লিকেশনে ব্যবহার করা হয়।
Read more