Practical উদাহরণ: Large Dataset এর জন্য Pagination এবং Sorting

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

244

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

এই টিউটোরিয়ালে, আমরা Lucenepagination এবং sorting কিভাবে কার্যকরীভাবে করা যায় তা উদাহরণসহ দেখাবো।


১. Lucene তে Pagination এর ধারণা

Pagination বা পৃষ্ঠায় বিভক্তকরণ এমন একটি কৌশল যেখানে আপনি একটি বড় ফলাফলের সেটের একটি নির্দিষ্ট পরিমাণ ফলাফল প্রতিটি পৃষ্ঠায় দেখান। এটি বড় ডেটাসেটের জন্য পারফরম্যান্স অপটিমাইজেশনে সাহায্য করে।

Lucene এ pagination করার জন্য, আমরা সাধারণত TopDocs ক্লাস ব্যবহার করি, যা সার্চ রেজাল্টের স্ন্যাপশট প্রদান করে এবং এর মাধ্যমে ফিল্টারিং এবং সীমাবদ্ধতা কার্যকর করা যায়।

Lucene তে Pagination উদাহরণ:

ধরা যাক, আমাদের একটি ইন্ডেক্স তৈরি করা হয়েছে এবং আমরা সেখানে ১০০০টি ডকুমেন্ট সংরক্ষণ করেছি। আমরা এক পৃষ্ঠায় ১০টি ডকুমেন্ট দেখাতে চাই এবং পরবর্তী পৃষ্ঠার জন্য pagination করতে চাই।

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
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.store.Directory;
import org.apache.lucene.store.RAMDirectory;

public class LucenePaginationExample {
    public static void main(String[] args) throws Exception {
        // Create the index
        Directory directory = new RAMDirectory();
        StandardAnalyzer analyzer = new StandardAnalyzer();
        IndexWriterConfig config = new IndexWriterConfig(analyzer);
        IndexWriter writer = new IndexWriter(directory, config);

        // Sample documents to index
        for (int i = 0; i < 1000; i++) {
            Document doc = new Document();
            doc.add(new TextField("content", "This is document " + i, Field.Store.YES));
            writer.addDocument(doc);
        }
        writer.close();

        // Search Query Setup
        String queryStr = "document";
        QueryParser parser = new QueryParser("content", analyzer);
        Query query = parser.parse(queryStr);

        // IndexSearcher for searching the indexed documents
        DirectoryReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // Pagination setup
        int pageSize = 10;  // Number of results per page
        int pageNumber = 3; // The page number to display
        int start = (pageNumber - 1) * pageSize;

        // Search for documents and apply pagination
        TopDocs topDocs = searcher.search(query, start + pageSize); // Fetch results

        System.out.println("Displaying page " + pageNumber + " of results:");

        for (int i = start; i < Math.min(topDocs.totalHits.value, start + pageSize); i++) {
            Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
            System.out.println(doc.get("content"));
        }

        reader.close();
        directory.close();
    }
}

এখানে, আমরা প্রথমে ১০০০টি ডকুমেন্ট তৈরি করেছি এবং পরে তাদের অনুসন্ধান করেছি। pagination করতে আমরা start এবং pageSize ব্যবহার করেছি এবং শুধুমাত্র নির্দিষ্ট পৃষ্ঠার জন্য ডকুমেন্ট দেখিয়েছি।


২. Lucene তে Sorting এর ধারণা

Sorting বা বিন্যাস হল সার্চ রেজাল্টগুলিকে কোনো নির্দিষ্ট ক্রমে সাজানোর প্রক্রিয়া। Lucene তে sorting করতে, আমরা Sort অবজেক্ট ব্যবহার করে একটি নির্দিষ্ট ক্ষেত্রের ওপর ডকুমেন্টগুলো সাজাতে পারি।

Lucene তে Sorting উদাহরণ:

ধরা যাক, আমাদের কিছু ডকুমেন্ট আছে এবং আমরা তাদের "content" ফিল্ডের ওপর সজ্জিত করতে চাই।

import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;

public class LuceneSortingExample {
    public static void main(String[] args) throws Exception {
        // Create the index and write documents as shown in the previous example...

        // Sort by 'content' field in ascending order
        Sort sort = new Sort(new SortField("content", SortField.Type.STRING));

        // Search for documents and apply sorting
        TopDocs topDocs = searcher.search(query, 10, sort);  // Get top 10 sorted results

        System.out.println("Sorted search results:");

        for (int i = 0; i < topDocs.scoreDocs.length; i++) {
            Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
            System.out.println(doc.get("content"));
        }

        reader.close();
        directory.close();
    }
}

এখানে, SortField ব্যবহার করে content ফিল্ডের ওপর ডকুমেন্টগুলো সজ্জিত করেছি। আপনি চাইলে ascending বা descending আর্ডারে সাজাতে পারেন।


৩. Pagination এবং Sorting একত্রিত করা

আপনি pagination এবং sorting একত্রে ব্যবহার করে একটি বড় ডেটাসেটের জন্য ডকুমেন্টগুলো একটি নির্দিষ্ট পৃষ্ঠায় সাজানো এবং সীমাবদ্ধ করতে পারেন।

উদাহরণ: Pagination এবং Sorting একত্রিত করা

import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;

public class LucenePaginationAndSortingExample {
    public static void main(String[] args) throws Exception {
        // Create the index and write documents as shown previously...

        // Pagination setup
        int pageSize = 10;
        int pageNumber = 3;
        int start = (pageNumber - 1) * pageSize;

        // Sorting setup
        Sort sort = new Sort(new SortField("content", SortField.Type.STRING));

        // Search and apply pagination and sorting
        TopDocs topDocs = searcher.search(query, start + pageSize, sort);

        System.out.println("Displaying sorted page " + pageNumber + " of results:");

        for (int i = start; i < Math.min(topDocs.totalHits.value, start + pageSize); i++) {
            Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
            System.out.println(doc.get("content"));
        }

        reader.close();
        directory.close();
    }
}

এখানে, আমরা pagination এবং sorting একত্রে ব্যবহার করেছি, যাতে সার্চ রেজাল্টকে প্রথমে সজ্জিত করা হয় এবং তারপর পৃষ্ঠায় ভাগ করা হয়।


সারাংশ

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


Content added By
Promotion

Are you sure to start over?

Loading...