Simple Query তৈরি করা (TermQuery, MatchAllDocsQuery)

Lucene তে Searching - লুসিন (Lucene) - Java Technologies

200

Apache Lucene একটি জনপ্রিয় ওপেন সোর্স লাইব্রেরি যা ডকুমেন্ট ইনডেক্সিং এবং সার্চিংয়ের জন্য ব্যবহৃত হয়। এটি অত্যন্ত কার্যকরী এবং দ্রুত সার্চ ইঞ্জিন তৈরি করতে সাহায্য করে। Lucene তে ডকুমেন্ট ইনডেক্স এবং সার্চ পরিচালনা করার জন্য বিভিন্ন ধরনের কুয়েরি ব্যবহৃত হয়। এই টিউটোরিয়ালে, আমরা দুটি সাধারণ কুয়েরি: TermQuery এবং MatchAllDocsQuery এর মাধ্যমে কীভাবে ডকুমেন্ট সার্চ করা যায় তা দেখব।


১. TermQuery: সুনির্দিষ্ট শব্দ অনুসন্ধান

TermQuery একটি খুব সাধারণ কুয়েরি যা নির্দিষ্ট একটি শব্দ বা টার্ম (Term) অনুসন্ধান করে। এটি সাধারণত যখন আপনি কোন একটি নির্দিষ্ট শব্দের ভিত্তিতে ডকুমেন্ট খুঁজতে চান তখন ব্যবহার হয়।

TermQuery এর কাজের প্রক্রিয়া:

  1. এটি একটি নির্দিষ্ট শব্দ বা টার্মের জন্য ইনডেক্সে অনুসন্ধান করে।
  2. টার্মের সাথে মিল থাকা সমস্ত ডকুমেন্টকে ফেরত দেয়।

উদাহরণ: TermQuery এর ব্যবহার

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.document.Document;

import java.io.IOException;
import java.nio.file.Paths;

public class LuceneTermQueryExample {

    public static void main(String[] args) throws IOException {
        // IndexDirectory থেকে ইনডেক্স পড়া
        Directory directory = FSDirectory.open(Paths.get("path/to/index"));
        IndexReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);
        
        // TermQuery তৈরি
        Term term = new Term("content", "Lucene"); // "content" ফিল্ডে "Lucene" টার্ম খোঁজা
        Query query = new TermQuery(term);

        // অনুসন্ধান করা
        TopDocs topDocs = searcher.search(query, 10); // 10টি রেজাল্ট ফেরত আনবে
        System.out.println("Number of Hits: " + topDocs.totalHits);

        // রেজাল্ট দেখানো
        for (int i = 0; i < topDocs.scoreDocs.length; i++) {
            Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
            System.out.println("Document " + i + ": " + doc.get("content"));
        }

        reader.close();
    }
}

এখানে, TermQuery ব্যবহার করে "content" ফিল্ডে "Lucene" টার্মটি খুঁজে বের করা হয়েছে। searcher.search() মেথডে এই কুয়েরি চালানো হয়েছে এবং প্রথম 10টি রেজাল্ট প্রদর্শিত হচ্ছে।


২. MatchAllDocsQuery: সমস্ত ডকুমেন্ট অনুসন্ধান

MatchAllDocsQuery একটি বিশেষ ধরনের কুয়েরি যা ইনডেক্সে থাকা সমস্ত ডকুমেন্টকে মেলানো হয়। এটি কোনও নির্দিষ্ট শব্দ বা শর্ত ছাড়া সমস্ত ডকুমেন্টকে ফেরত দেয়। এটি সাধারণত সেই পরিস্থিতিতে ব্যবহৃত হয় যখন আপনাকে সমস্ত ডকুমেন্টের উপর কোনো ধরনের ফিল্টার বা শর্ত না রেখে অনুসন্ধান করতে হয়।

MatchAllDocsQuery এর কাজের প্রক্রিয়া:

  1. এটি সমস্ত ডকুমেন্টের জন্য অনুসন্ধান চালায় এবং সকল ডকুমেন্ট ফেরত দেয়।

উদাহরণ: MatchAllDocsQuery এর ব্যবহার

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.document.Document;

import java.io.IOException;
import java.nio.file.Paths;

public class LuceneMatchAllDocsQueryExample {

    public static void main(String[] args) throws IOException {
        // IndexDirectory থেকে ইনডেক্স পড়া
        Directory directory = FSDirectory.open(Paths.get("path/to/index"));
        IndexReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // MatchAllDocsQuery তৈরি
        Query query = new MatchAllDocsQuery();

        // অনুসন্ধান করা
        TopDocs topDocs = searcher.search(query, 10); // 10টি রেজাল্ট ফেরত আনবে
        System.out.println("Number of Hits: " + topDocs.totalHits);

        // রেজাল্ট দেখানো
        for (int i = 0; i < topDocs.scoreDocs.length; i++) {
            Document doc = searcher.doc(topDocs.scoreDocs[i].doc);
            System.out.println("Document " + i + ": " + doc.get("content"));
        }

        reader.close();
    }
}

এখানে, MatchAllDocsQuery ব্যবহার করে ইনডেক্সের সব ডকুমেন্টগুলোকে অনুসন্ধান করা হয়েছে। এটি সকল ডকুমেন্টের উপর কুয়েরি চালায় এবং প্রথম 10টি রেজাল্ট ফেরত দেয়।


৩. TermQuery এবং MatchAllDocsQuery এর মধ্যে পার্থক্য

  • TermQuery: এটি নির্দিষ্ট একটি টার্ম (শব্দ) অনুসন্ধান করে। এটি সাধারণত যখন আপনি একটি নির্দিষ্ট শব্দ বা শর্ত দিয়ে ডকুমেন্ট খুঁজতে চান তখন ব্যবহৃত হয়।
  • MatchAllDocsQuery: এটি কোনো নির্দিষ্ট শর্ত ছাড়া সকল ডকুমেন্টকে অনুসন্ধান করে। এটি সাধারণত সমস্ত ডকুমেন্টের উপর কিছু ফিল্টার বা শর্ত ছাড়াই অনুসন্ধান করতে ব্যবহৃত হয়।

সারাংশ

LuceneTermQuery এবং MatchAllDocsQuery হল দুটি মৌলিক এবং কার্যকরী কুয়েরি যা ডকুমেন্ট অনুসন্ধান করতে ব্যবহৃত হয়। TermQuery ব্যবহার করে আপনি একটি নির্দিষ্ট শব্দের ভিত্তিতে ডকুমেন্ট খুঁজতে পারেন, যখন MatchAllDocsQuery ব্যবহার করে আপনি সমস্ত ডকুমেন্টের মধ্যে অনুসন্ধান করতে পারেন। এই দুটি কুয়েরি ম্যাপিং এবং অনুসন্ধান প্রক্রিয়াকে আরও সহজ এবং কার্যকরী করে তোলে।


Content added By
Promotion

Are you sure to start over?

Loading...