Apache Lucene একটি Java ভিত্তিক লাইব্রেরি যা full-text indexing এবং searching সমাধান প্রদান করে। এটি ব্যবহৃত হয় যে কোন ধরনের ডেটাতে দ্রুত সার্চ ফিচার যোগ করতে। Lucene এর মাধ্যমে ডেটা ইনডেক্স করা হয় এবং পরে সেই ইনডেক্স ব্যবহার করে দ্রুত সার্চ অপারেশন করা যায়।
এখানে আমরা একটি practical উদাহরণ দেখব যেখানে Lucene এর মাধ্যমে একটি সিম্পল ডকুমেন্ট ইনডেক্স এবং সার্চ করা হবে।
১. Lucene Indexing এবং Searching এর ধারণা
- Indexing: ডেটা প্রথমে ইনডেক্স করা হয়, যা এর বিভিন্ন ফিল্ডের উপর ভিত্তি করে দ্রুত অনুসন্ধান করা সম্ভব করে। ইনডেক্সিং প্রক্রিয়ায় ডকুমেন্টগুলোর ফিল্ডগুলোকে tokens বা শব্দাংশে বিভক্ত করে এবং তা ইনডেক্সে সংরক্ষণ করা হয়।
- Searching: ইনডেক্স করা ডেটাতে অনুসন্ধান (search) করা হয়। সার্চের মাধ্যমে ব্যবহারকারী তাদের কাঙ্ক্ষিত তথ্য দ্রুত পায়।
২. Lucene Indexing Example
Lucene এ ডকুমেন্ট ইনডেক্স করার জন্য কয়েকটি ধাপ অনুসরণ করতে হয়:
- Directory: যেখানে ইনডেক্সটি সংরক্ষণ করা হবে।
- Analyzer: ডকুমেন্টের টেক্সটকে উপযুক্ত আকারে বিভক্ত করতে ব্যবহৃত হয়।
- IndexWriter: এটি ইনডেক্স লেখার জন্য ব্যবহৃত হয়।
২.১ Maven Dependencies
Lucene ব্যবহার করতে হলে প্রথমে Maven প্রোজেক্টে প্রয়োজনীয় ডিপেনডেন্সি যুক্ত করতে হবে।
<dependencies>
<!-- Lucene Core -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>8.11.0</version>
</dependency>
<!-- Lucene Analyzer -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>8.11.0</version>
</dependency>
</dependencies>
২.২ Document Indexing Example
এখন, আমরা Lucene ব্যবহার করে সিম্পল ডকুমেন্ট ইনডেক্স করব। এখানে, প্রতিটি ডকুমেন্টে কিছু টেক্সট এবং টাইটেল থাকবে।
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.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
import java.io.IOException;
import java.nio.file.Paths;
public class LuceneIndexer {
public static void main(String[] args) throws IOException {
// Index location
String indexPath = "indexDir";
// Open a directory to store index
FSDirectory directory = FSDirectory.open(Paths.get(indexPath));
// StandardAnalyzer for text indexing
StandardAnalyzer analyzer = new StandardAnalyzer();
// IndexWriterConfig setup
IndexWriterConfig config = new IndexWriterConfig(analyzer);
// IndexWriter to write data into the index
IndexWriter writer = new IndexWriter(directory, config);
// Create a document and add fields
Document doc = new Document();
doc.add(new TextField("title", "Lucene Basics", Field.Store.YES));
doc.add(new TextField("content", "This is a simple example of Lucene indexing", Field.Store.YES));
// Add the document to the index
writer.addDocument(doc);
// Close writer
writer.close();
System.out.println("Document indexed successfully!");
}
}
এখানে:
- StandardAnalyzer টেক্সট বিশ্লেষণ করার জন্য ব্যবহার করা হয়েছে।
- TextField ফিল্ডে ইনডেক্স করা টেক্সট সংরক্ষণ করা হচ্ছে।
- ইনডেক্স লেখার জন্য IndexWriter ব্যবহার করা হয়েছে এবং ইনডেক্সটি indexDir নামক ফোল্ডারে সংরক্ষিত হবে।
৩. Lucene Searching Example
ডকুমেন্ট ইনডেক্স করার পর, আমরা সেগুলির মধ্যে সার্চ করতে পারি। সার্চের জন্য IndexReader এবং IndexSearcher ব্যবহৃত হয়।
৩.১ Searching Documents Example
এখানে আমরা title ফিল্ডের মধ্যে "Lucene" শব্দটি খুঁজে বের করব।
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.store.FSDirectory;
import java.nio.file.Paths;
public class LuceneSearcher {
public static void main(String[] args) throws Exception {
// Index location
String indexPath = "indexDir";
// Open the directory where the index is stored
FSDirectory directory = FSDirectory.open(Paths.get(indexPath));
// Open the index for reading
DirectoryReader reader = DirectoryReader.open(directory);
// Create an IndexSearcher to search the index
IndexSearcher searcher = new IndexSearcher(reader);
// Create a QueryParser to search for documents with "Lucene" in the title
QueryParser parser = new QueryParser("title", new StandardAnalyzer());
Query query = parser.parse("Lucene");
// Search the index
int hits = searcher.search(query, 10).scoreDocs.length;
// Print the search results
System.out.println("Number of documents found: " + hits);
// Close the reader
reader.close();
}
}
এখানে:
- QueryParser ব্যবহার করে আমরা
titleফিল্ডের মধ্যে "Lucene" শব্দটি অনুসন্ধান করেছি। - IndexSearcher ব্যবহার করে ইনডেক্সে সার্চ করা হয়েছে এবং এর ফলাফল আউটপুট করা হয়েছে।
৪. Lucene Indexing এবং Searching Summary
Lucene ব্যবহার করে ডকুমেন্ট ইনডেক্সিং এবং সার্চ করা খুবই সহজ। মূল ধাপগুলো হলো:
- Document Creation: একটি ডকুমেন্ট তৈরি করে টেক্সট ফিল্ড যোগ করা।
- Indexing: IndexWriter ব্যবহার করে ডকুমেন্টকে ইনডেক্সে যোগ করা।
- Searching: IndexSearcher ব্যবহার করে ইনডেক্সে সার্চ করা এবং ফলাফল পাওয়া।
Lucene এর মাধ্যমে আমরা সহজে ডেটার মধ্যে অনুসন্ধান করতে পারি, এবং ইনডেক্সিংয়ের মাধ্যমে সেই অনুসন্ধান দ্রুততর করতে পারি। এটি বিশেষভাবে full-text search এবং real-time search এর জন্য খুব কার্যকরী।
সারাংশ
Lucene একটি শক্তিশালী এবং লাইটওয়েট লাইব্রেরি যা Java প্রোজেক্টে full-text indexing এবং searching এর জন্য ব্যবহৃত হয়। এটি ডকুমেন্ট ইনডেক্স করে এবং পরে দ্রুত সার্চ অপারেশন সম্পাদন করতে সহায়তা করে। উদাহরণ হিসেবে, Lucene ব্যবহার করে সিম্পল ডকুমেন্ট ইনডেক্সিং এবং সার্চিং প্রক্রিয়া দেখানো হয়েছে, যা আপনাকে Lucene এর মৌলিক ধারণা এবং ব্যবহার সম্পর্কে ধারণা দেবে।
Read more