Pagination এর জন্য TopDocs এবং ScoreDoc ব্যবহার

Lucene তে Pagination এবং Sorting - লুসিন (Lucene) - Java Technologies

262

Apache Lucene হল একটি ওপেন সোর্স টুল যা টেক্সট ডাটাবেসে ইন্ডেক্সিং এবং সাচিংয়ের জন্য ব্যবহৃত হয়। লুসিন ব্যবহার করে আপনি দ্রুত এবং কার্যকরীভাবে ডেটা সাচ করতে পারেন। এক্ষেত্রে, যদি আপনার ফলাফল অনেক বড় হয়, তবে pagination (পেইজিনেশন) ব্যবহার করা গুরুত্বপূর্ণ, যাতে ব্যবহারকারী শুধুমাত্র প্রাসঙ্গিক ফলাফল দেখেন।

TopDocs এবং ScoreDoc হল লুসিনের দুটি গুরুত্বপূর্ণ ক্লাস যা pagination করতে সাহায্য করে। এগুলি ব্যবহৃত হয় যখন আপনার কোয়েরি ফলাফল বিশাল হয় এবং আপনি একটি নির্দিষ্ট সীমার মধ্যে ফলাফল পেতে চান।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে TopDocs এবং ScoreDoc ব্যবহার করে লুসিনে পেইজিনেশন করা যায়।


১. TopDocs এবং ScoreDoc Overview

  • TopDocs: এটি লুসিনে সার্চ কোয়েরি ফলাফলের একটি কন্টেইনার যা সর্বোচ্চ ফলাফল ধারণ করে। এটি একটি সংগ্রহ যা ScoreDoc অবজেক্টের একটি অ্যারে রাখে, প্রতিটি ScoreDoc একটি সার্চ রেজাল্ট (ডকুমেন্ট) কে রিপ্রেজেন্ট করে।
  • ScoreDoc: এটি একটি ক্লাস যা লুসিনের সার্চ ফলাফলের প্রতিটি ডকুমেন্টের জন্য তথ্য ধারণ করে, যেমন ডকুমেন্টের স্কোর এবং তার ইনডেক্স।

এখানে, TopDocs এবং ScoreDoc ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট সংখ্যক ফলাফল এবং পেইজিনেশন ফিচার পেতে পারেন।


২. Pagination এর জন্য TopDocs এবং ScoreDoc এর ব্যবহার

লুসিনে পেইজিনেশন করতে, প্রথমে সার্চ কোয়েরি তৈরি করতে হবে, এবং তারপর TopDocs অবজেক্ট থেকে ScoreDoc ব্যবহার করে নির্দিষ্ট পেইজের ফলাফল দেখতে হবে। নিচে একটি উদাহরণ দেওয়া হলো:

উদাহরণ: Lucene Pagination with TopDocs and ScoreDoc

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.*;

import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;

import java.io.IOException;

public class LucenePaginationExample {

    public static void main(String[] args) throws IOException {
        // Index setup
        RAMDirectory ramDirectory = new RAMDirectory();
        IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
        IndexWriter writer = new IndexWriter(ramDirectory, config);

        // Sample document to index
        Document doc1 = new Document();
        doc1.add(new org.apache.lucene.document.TextField("content", "This is the first document", org.apache.lucene.document.Field.Store.YES));
        writer.addDocument(doc1);

        Document doc2 = new Document();
        doc2.add(new org.apache.lucene.document.TextField("content", "This is the second document", org.apache.lucene.document.Field.Store.YES));
        writer.addDocument(doc2);

        Document doc3 = new Document();
        doc3.add(new org.apache.lucene.document.TextField("content", "Another document", org.apache.lucene.document.Field.Store.YES));
        writer.addDocument(doc3);

        writer.commit();
        writer.close();

        // Create a searcher and query
        IndexReader reader = DirectoryReader.open(ramDirectory);
        IndexSearcher searcher = new IndexSearcher(reader);

        Query query = new TermQuery(new org.apache.lucene.index.Term("content", "document"));

        // Pagination logic (get the first 2 results)
        int pageSize = 2;
        int start = 0;
        TopDocs topDocs = searcher.search(query, start + pageSize);

        // Process the results for pagination
        ScoreDoc[] hits = topDocs.scoreDocs;

        // Displaying the documents in the current page (results 0 to 2)
        for (int i = start; i < hits.length; i++) {
            int docId = hits[i].doc;
            Document d = searcher.doc(docId);
            System.out.println("Document " + (i + 1) + ": " + d.get("content"));
        }

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

কোড ব্যাখ্যা:

  • IndexWriter এবং RAMDirectory ব্যবহার করে কিছু নমুনা ডকুমেন্ট ইনডেক্স করা হয়েছে।
  • একটি TermQuery ব্যবহার করে আমরা "document" শব্দটি খুঁজেছি।
  • TopDocs এর মাধ্যমে আমরা কোয়েরি ফলাফল পেয়ে যাচ্ছি এবং ScoreDoc ব্যবহার করে নির্দিষ্ট পেইজের ফলাফল দেখাচ্ছি। এই ক্ষেত্রে, আমরা প্রথম ২টি ফলাফল (pageSize = 2) দেখছি।

৩. Pagination এর জন্য Key Components

  1. TopDocs: এটি সার্চ কোয়েরি ফলাফলের সব ডকুমেন্ট এবং তাদের স্কোর ধারণ করে। এটি একটি কন্টেইনার যা ScoreDoc এর অ্যারে ধারণ করে।
  2. ScoreDoc: এটি একক ডকুমেন্টের ফলাফল, যেমন ডকুমেন্টের স্কোর, ডকুমেন্ট ID ইত্যাদি ধারণ করে। এটি পেইজিনেশন এবং ডকুমেন্ট শনাক্ত করতে ব্যবহৃত হয়।
  3. start এবং pageSize: এই দুটি ভেরিয়েবল পেইজিনেশন কন্ট্রোল করতে ব্যবহৃত হয়। start পেইজের শুরুর পজিশন নির্ধারণ করে এবং pageSize পেইজে কতটি ফলাফল থাকবে তা নির্ধারণ করে।

৪. Pagination এর জন্য TopDocs এবং ScoreDoc ব্যবহার করে Multiple Pages Retrieve করা

লুসিনে পেইজিনেশন করতে, আপনি start এবং pageSize ব্যবহার করে বিভিন্ন পেইজের ফলাফল পেতে পারেন। এখানে, আমরা প্রথম পেইজের (0-2) পর দ্বিতীয় পেইজ (3-5) এবং আরও পেইজ পেতে পারি।

উদাহরণ: Multiple Pages Retrieval

// Page 1: start = 0, pageSize = 2
TopDocs topDocsPage1 = searcher.search(query, 0 + 2);
ScoreDoc[] hitsPage1 = topDocsPage1.scoreDocs;
for (int i = 0; i < hitsPage1.length; i++) {
    int docId = hitsPage1[i].doc;
    Document doc = searcher.doc(docId);
    System.out.println("Page 1 - Doc " + (i + 1) + ": " + doc.get("content"));
}

// Page 2: start = 2, pageSize = 2
TopDocs topDocsPage2 = searcher.search(query, 2 + 2);
ScoreDoc[] hitsPage2 = topDocsPage2.scoreDocs;
for (int i = 2; i < hitsPage2.length + 2; i++) {
    int docId = hitsPage2[i - 2].doc;
    Document doc = searcher.doc(docId);
    System.out.println("Page 2 - Doc " + (i + 1) + ": " + doc.get("content"));
}

এখানে, প্রথম পেইজের জন্য start = 0 এবং দ্বিতীয় পেইজের জন্য start = 2 সেট করা হয়েছে। TopDocs এবং ScoreDoc এর মাধ্যমে আমরা নির্দিষ্ট পেইজের ফলাফল নিয়ে আসছি।


৫. TopDocs এবং ScoreDoc এর সুবিধা

  • Efficient Pagination: লুসিনের মাধ্যমে পেইজিনেশন করা অত্যন্ত দক্ষ এবং দ্রুত। TopDocs এবং ScoreDoc সার্চ কোয়েরির ফলাফল দ্রুত প্রক্রিয়া করে এবং নির্দিষ্ট পেইজের ফলাফল প্রদর্শন করতে সাহায্য করে।
  • Control over Results: আপনি ফলাফলের শুরুর পজিশন এবং ফলাফলের সংখ্যা (pageSize) নিয়ন্ত্রণ করতে পারেন, যা পেইজিনেশন প্রক্রিয়াকে আরও সঠিক এবং কার্যকরী করে তোলে।
  • Memory Management: TopDocs শুধুমাত্র পেইজের জন্য প্রয়োজনীয় ডেটা রাখে, তাই মেমরি অপটিমাইজেশন হয় এবং খুব বড় সাইজের ডেটাবেসের সাথে কাজ করার সময় এটি কার্যকর।

সারাংশ

TopDocs এবং ScoreDoc হল লুসিনের দুটি গুরুত্বপূর্ণ ক্লাস যা pagination এবং search result management করার জন্য ব্যবহৃত হয়। TopDocs কোয়েরি ফলাফলের একটি কন্টেইনার হিসেবে কাজ করে, যেখানে ScoreDoc প্রতিটি ডকুমেন্টের স্কোর এবং তথ্য ধারণ করে। এই দুটি ক্লাস ব্যবহারের মাধ্যমে আপনি সহজেই লুসিনে পেইজিনেশন এবং দ্রুত সার্চ ফলাফল পেতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...