Lucene এর Document Class এর ভূমিকা

Document এবং Field - লুসিন (Lucene) - Java Technologies

313

Lucene একটি ওপেন সোর্স লাইব্রেরি যা টেক্সট সার্চিং ও ইনডেক্সিং সম্পর্কিত কাজের জন্য ব্যবহৃত হয়। এটি একটি অত্যন্ত কার্যকরী এবং উচ্চ পারফরম্যান্স টেক্সট সার্চ ইঞ্জিন যা বড় আকারের ডেটাবেসে ডেটা অনুসন্ধানের কাজ সহজ করে তোলে। Lucene এর Document Class এই ইন্ডেক্সিং সিস্টেমের একটি মৌলিক অংশ, কারণ এটি ইন্ডেক্সের মধ্যে তথ্য সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়।

১. Lucene Document Class এর ভূমিকা

Document ক্লাস Lucene ইন্ডেক্সে স্টোর করা ডেটা বা এন্ট্রি নির্দেশ করে। এটি একটি JavaBean টাইপের ক্লাস, যার মধ্যে একটি বা একাধিক Field থাকে। প্রত্যেকটি Field হল একটি কনটেইনারে রাখা তথ্য, যা ইন্ডেক্সে স্টোর করা হবে এবং পরবর্তীতে অনুসন্ধান করা যাবে। Document ক্লাসের সাহায্যে আমরা আমাদের ডেটা বা টেক্সটকে কার্যকরীভাবে ইন্ডেক্সে সংরক্ষণ এবং সার্চের জন্য প্রস্তুত করতে পারি।

২. Document Class এর মৌলিক ফাংশনালিটি

Lucene এর Document ক্লাসের কয়েকটি গুরুত্বপূর্ণ কাজ থাকে:

  • ডেটা সংরক্ষণ করা: Document ক্লাস Field অবজেক্টের মাধ্যমে ডেটা সংগ্রহ করে এবং সেই ডেটা ইন্ডেক্সে সংরক্ষণ করা হয়।
  • ফিল্ড ম্যানেজমেন্ট: Document ক্লাসের মাধ্যমে আমরা ইন্ডেক্সে বিভিন্ন ধরনের Field যুক্ত করতে পারি, যেমন টেক্সট, নম্বর, তারিখ ইত্যাদি।
  • ব্যবহারকারী ডেটা মডেল তৈরি করা: একটি Document একাধিক Field ধারণ করতে পারে, যা এক বা একাধিক ডেটা টাইপ (যেমন, String, Date, Integer) ধারণ করে।

৩. Document Class এর গঠন

Document ক্লাসের সাধারণ গঠন এবং এর কার্যকরী ব্যবহার নিয়ে বিস্তারিত আলোচনা করা যাক:

উদাহরণ: Document ক্লাসের একটি সাধারণ ব্যবহার

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;

public class LuceneExample {
    public static void main(String[] args) {
        // Create a new Document
        Document document = new Document();

        // Adding Fields to the Document
        document.add(new StringField("id", "1", Field.Store.YES));  // A field to store id
        document.add(new TextField("title", "Lucene Introduction", Field.Store.YES));  // A field to store title
        document.add(new TextField("content", "This is a basic example of Lucene indexing", Field.Store.YES));  // A field to store content

        // Document now contains fields that are ready to be indexed
        // Add this Document to the index (indexing process is done separately)
    }
}

এখানে:

  • StringField এবং TextField হল Field এর দুটি সাধারণ টাইপ যা Lucene ডকুমেন্টের মধ্যে ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
  • Field.Store.YES নির্দেশ করে যে এই ফিল্ডটি স্টোর করা হবে এবং অনুসন্ধানের জন্য উপলব্ধ থাকবে।

৪. Document Class এর Field Types

Lucene এর Document ক্লাস বিভিন্ন ধরনের Field ব্যবহার করে ডেটা সংরক্ষণ করে। এই Field গুলি বিভিন্ন ডেটা টাইপের সাথে সম্পর্কিত এবং সার্চ অপটিমাইজেশন করা হয়।

কিছু সাধারণ Field Types:

  1. TextField: মূলত টেক্সট বা স্ট্রিং ডেটা স্টোর করার জন্য ব্যবহৃত হয়, যা নরমালাইজড হয় (যেমন টোকেনাইজড বা স্টেমিং)।
  2. StringField: স্ট্রিং ডেটার জন্য ব্যবহৃত হয়, যেখানে ডেটা নিখুঁতভাবে সার্চ করা হয়, এবং এটি ইনডেক্সের মাধ্যমে ডেটা সার্চ করতে সহায়ক।
  3. IntPoint/LongPoint: সংখ্যামূলক ডেটা (যেমন ইনটিজার, লং) স্টোর এবং সার্চ করতে ব্যবহৃত হয়।
  4. StoredField: ফিল্ডের ডেটা স্টোর করতে ব্যবহৃত হয়, কিন্তু এটি ইনডেক্সিং এর জন্য নয়। এটি শুধুমাত্র ডিসপ্লে করার জন্য ব্যবহৃত হয়।
  5. DatePoint: তারিখ সম্পর্কিত ডেটা স্টোর করার জন্য ব্যবহৃত হয়।

৫. Lucene Document Class এর গুরুত্বপূর্ণ বৈশিষ্ট্য

  1. Field Storage Control: Field.Store.YES বা Field.Store.NO এর মাধ্যমে আপনি নির্ধারণ করতে পারেন যে একটি ফিল্ড ডেটা ইন্ডেক্সে সংরক্ষিত হবে কিনা।
  2. Tokenization: TextField সাধারণত টোকেনাইজড হয়, অর্থাৎ এটি শব্দকে আলাদা আলাদা করে ইনডেক্সে সংরক্ষণ করে, যা দ্রুত অনুসন্ধান করতে সহায়তা করে।
  3. Multiple Fields: একটি Document একাধিক Field ধারণ করতে পারে, যেমন একাধিক শব্দ, তারিখ, সংখ্যা ইত্যাদি।
  4. Data Querying: Lucene ব্যবহারকারীকে ফিল্ড অনুযায়ী ডেটা খুঁজে বের করতে সাহায্য করে, যেমন "title", "content" বা "date"।

৬. Document Class এর মাধ্যমে ইনডেক্সিং

Document ক্লাস ব্যবহার করে, আপনি আপনার ডেটা ইনডেক্সে সংরক্ষণ করতে পারবেন। উদাহরণস্বরূপ, আপনার যদি কয়েকটি Document থাকে এবং সেগুলিকে ইনডেক্সে যোগ করতে চান, তাহলে আপনাকে IndexWriter ব্যবহার করতে হবে।

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 org.apache.lucene.analysis.standard.StandardAnalyzer;

public class LuceneIndexing {
    public static void main(String[] args) throws Exception {
        // Create an IndexWriter
        Directory directory = FSDirectory.open(new java.nio.file.Path("indexDirectory"));
        IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
        IndexWriter writer = new IndexWriter(directory, config);

        // Create a new document
        Document doc = new Document();
        doc.add(new TextField("title", "Lucene Introduction", Field.Store.YES));
        doc.add(new TextField("content", "Lucene is an open-source search library.", Field.Store.YES));
        
        // Add document to the index
        writer.addDocument(doc);

        // Commit and close the writer
        writer.commit();
        writer.close();
    }
}

এখানে:

  • IndexWriter ব্যবহৃত হয়েছে নতুন ডকুমেন্ট ইনডেক্সে যোগ করার জন্য।
  • StandardAnalyzer একটি সাধারণ এনালাইজার যা ইনডেক্সিং এবং সার্চের জন্য টোকেনাইজড টেক্সট প্রস্তুত করে।

৭. Document Class এর মাধ্যমে Search

একবার ডেটা ইন্ডেক্সে সংরক্ষিত হয়ে গেলে, IndexSearcher এর মাধ্যমে আপনি তা সার্চ করতে পারেন।

import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.Query;

public class LuceneSearch {
    public static void main(String[] args) throws Exception {
        Directory directory = FSDirectory.open(new java.nio.file.Path("indexDirectory"));
        IndexReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        QueryParser parser = new QueryParser("content", new StandardAnalyzer());
        Query query = parser.parse("Lucene");

        // Search the index
        int hits = searcher.search(query, 10).totalHits;
        System.out.println("Total results: " + hits);

        // Close the searcher
        reader.close();
    }
}

এখানে, QueryParser ব্যবহার করে ইনডেক্সে সার্চ করতে পারি এবং অনুসন্ধানের ফলাফল হিসেবে মোট হিট গুলো দেখতে পারি।


সারাংশ

Lucene এর Document Class একটি গুরুত্বপূর্ণ অংশ যা ডেটা ইনডেক্সিং এবং সার্চ প্রক্রিয়ায় ব্যবহৃত হয়। এটি ডেটা বা ইনফরমেশন সংরক্ষণের জন্য Field ব্যবহার করে, এবং IndexWriter এর মাধ্যমে ডেটাকে ইনডেক্সে যোগ করতে সাহায্য করে। Lucene Document Class বিভিন্ন Field Types ব্যবহার করে ডেটা স্টোর এবং সার্চ অপটিমাইজেশন সরবরাহ করে। এটি ডেটাকে টোকেনাইজ করতে সক্ষম, যা দ্রুত অনুসন্ধান কার্যক্রমে সহায়তা করে।


Content added By
Promotion

Are you sure to start over?

Loading...