Apache Lucene একটি শক্তিশালী এবং জনপ্রিয় ওপেন সোর্স লাইব্রেরি যা Java ভিত্তিক টেক্সট সার্চ ইঞ্জিন তৈরি করতে ব্যবহৃত হয়। এটি Indexing এবং Searching কার্যক্রম খুব দ্রুত এবং কার্যকরভাবে সম্পাদন করতে সক্ষম। Lucene এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল Term Highlighting, যার মাধ্যমে আপনি সার্চ রেজাল্টের মধ্যে যে টার্ম বা শব্দটি খোঁজা হয়েছে, তা হাইলাইট করতে পারেন।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে Lucene ব্যবহার করে সার্চ রেজাল্টে টার্ম হাইলাইট করা যায়। এটি খুবই কার্যকরী যখন আপনি সার্চ রেজাল্টে ব্যবহারকারীর দেওয়া কিওয়ার্ডগুলো হাইলাইট করতে চান, যাতে ব্যবহারকারী সঠিক তথ্য দ্রুত খুঁজে পায়।
১. Lucene Indexing এবং Searching প্রক্রিয়া
Lucene তে টার্ম হাইলাইট করতে, প্রথমে আপনাকে Index তৈরি করতে হবে, তারপর Search করতে হবে। সেই সার্চের ফলাফল থেকে আপনি হাইলাইট করতে চান এমন টার্ম বা শব্দগুলো আলাদা করতে হবে।
Indexing
Indexing হল প্রক্রিয়া যেখানে টেক্সট ডেটা থেকে গুরুত্বপূর্ণ তথ্য বা টার্ম সংরক্ষণ করা হয়, যা পরে দ্রুত সার্চ করতে সাহায্য করে।
Searching
Searching হল প্রক্রিয়া যেখানে ব্যবহারকারী একটি কিওয়ার্ড প্রদান করে এবং Lucene ইন্ডেক্স থেকে সেই কিওয়ার্ডের সাথে সম্পর্কিত ডেটা খুঁজে বের করে।
২. Lucene Search Result এ Term Highlighting
Lucene তে সার্চ রেজাল্টে টার্ম হাইলাইট করার জন্য Highlighter ক্লাস ব্যবহার করা হয়। এটি সার্চ রেজাল্টে টার্মগুলোকে HTML ফরম্যাটে হাইলাইট করে, যাতে আপনি সহজে সার্চ রেজাল্টে প্রাসঙ্গিক শব্দ বা টার্মগুলো চিহ্নিত করতে পারেন।
৩. Example: Term Highlighting in Lucene
এই উদাহরণে, আমরা দেখব কিভাবে Lucene এ Indexing এবং Searching এর মাধ্যমে সার্চ রেজাল্টে টার্ম হাইলাইট করা যায়।
৩.১ Lucene Indexing
প্রথমে, আপনাকে Lucene ইনডেক্স তৈরি করতে হবে, যেখানে আপনার ডকুমেন্টের সব টার্ম ইনডেক্স করা হবে।
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
public class LuceneIndexer {
public static void main(String[] args) throws Exception {
// Create an in-memory index
RAMDirectory directory = new RAMDirectory();
// Create an analyzer (StandardAnalyzer is used here)
StandardAnalyzer analyzer = new StandardAnalyzer();
// Create IndexWriter configuration
IndexWriterConfig config = new IndexWriterConfig(analyzer);
// Create IndexWriter
IndexWriter writer = new IndexWriter(directory, config);
// Create a document
Document doc = new Document();
doc.add(new TextField("content", "Lucene is a powerful search library", Field.Store.YES));
// Add the document to the index
writer.addDocument(doc);
// Commit and close the writer
writer.close();
}
}
এখানে, RAMDirectory ব্যবহার করা হয়েছে যাতে ইন-মেমরি ডিরেক্টরি তৈরি হয় এবং TextField ব্যবহার করা হয়েছে যাতে টেক্সট ডেটা ইনডেক্স করা হয়।
৩.২ Lucene Search Query
এখন, আমরা ইন্ডেক্সে একটি সার্চ কিউয়ারি রান করব এবং সেই কিউয়ারির মাধ্যমে পাওয়া রেজাল্টে টার্ম হাইলাইট করব।
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryParser;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
public class LuceneSearchAndHighlight {
public static void main(String[] args) throws Exception {
// Create an IndexReader to read the index
DirectoryReader reader = DirectoryReader.open(new RAMDirectory());
IndexSearcher searcher = new IndexSearcher(reader);
// Create a query (search for the word "Lucene")
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query query = parser.parse("Lucene");
// Perform the search
TopDocs results = searcher.search(query, 10);
// Set up the highlighter
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("<b>", "</b>");
QueryScorer scorer = new QueryScorer(query);
Highlighter highlighter = new Highlighter(formatter, scorer);
// Highlight the results
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");
// Highlight the text with the query
String highlightedText = highlighter.getBestFragment(new StandardAnalyzer(), "content", text);
System.out.println("Highlighted Text: " + highlightedText);
}
// Close the reader
reader.close();
}
}
এখানে:
- QueryParser ব্যবহার করে একটি কিউয়ারি তৈরি করা হয়েছে (যেমন
"Lucene"শব্দটি খুঁজতে)। - Highlighter ক্লাস ব্যবহার করে, সার্চ রেজাল্টে টার্ম Lucene হাইলাইট করা হয়েছে।
- SimpleHTMLFormatter ব্যবহার করে, হাইলাইট করা টার্মগুলি
<b>এবং</b>ট্যাগে রাখা হয়েছে।
৪. Output
যদি আপনি উপরের কোডটি চালান, আপনি নিম্নলিখিত আউটপুট দেখতে পাবেন:
Highlighted Text: <b>Lucene</b> is a powerful search library
এখানে, Lucene শব্দটি <b> এবং </b> ট্যাগে হাইলাইট হয়েছে।
৫. Summary
Lucene তে টার্ম হাইলাইট করা খুবই সহজ এবং কার্যকরী। এটি ব্যবহারকারীর জন্য একটি চমৎকার সুবিধা প্রদান করে, কারণ তারা তাদের সার্চ রেজাল্টে অবিলম্বে খোঁজা শব্দ বা টার্ম দেখতে পারে। Highlighter ক্লাস ব্যবহার করে আপনি সার্চ রেজাল্টে হাইলাইট করতে পারেন এবং সহজেই HTML ফরম্যাটে কাস্টম টার্ম হাইলাইট করতে পারেন। এই টুলটি বিশেষত ব্যবহারকারীর জন্য সহজ এবং কার্যকরী সোজাসুজি সার্চ রেজাল্ট তৈরি করতে সহায়তা করে।
Read more