Practical উদাহরণ: বিভিন্ন Query Type এর মাধ্যমে Searching

Query Types এবং Filters - লুসিন (Lucene) - Java Technologies

271

Lucene হল একটি উচ্চ ক্ষমতাসম্পন্ন, ওপেন সোর্স তথ্য অনুসন্ধান লাইব্রেরি যা Java ভিত্তিক। এটি ব্যবহৃত হয় টেক্সট অনুসন্ধান সিস্টেম তৈরি করতে এবং বৃহৎ পরিমাণে ডেটা খোঁজার জন্য দ্রুত কার্যকারিতা সরবরাহ করতে। লুসিনে অনুসন্ধান করার জন্য বিভিন্ন Query Types ব্যবহার করা যায়, যা অনুসন্ধান প্রক্রিয়াকে আরও নমনীয় এবং শক্তিশালী করে তোলে।

এই টিউটোরিয়ালে, আমরা Lucene তে বিভিন্ন Query Types এর মাধ্যমে অনুসন্ধান কিভাবে করা যায় তা দেখবো।


১. Lucene Query Types

Lucene এর মধ্যে কিছু প্রধান Query Types রয়েছে যেগুলির মাধ্যমে আপনি ডেটাতে দ্রুত এবং নির্ভুল অনুসন্ধান করতে পারবেন। কিছু সাধারণ Query Types হল:

  1. Term Query: একটি নির্দিষ্ট শব্দের জন্য অনুসন্ধান।
  2. Phrase Query: একটি নির্দিষ্ট বাক্যের জন্য অনুসন্ধান।
  3. Boolean Query: বিভিন্ন শর্তে অনুসন্ধান।
  4. Wildcard Query: Wildcards (* বা ?) ব্যবহার করে অনুসন্ধান।
  5. Range Query: একটি নির্দিষ্ট রেঞ্জের মধ্যে অনুসন্ধান।
  6. Fuzzy Query: শব্দে মিল খুঁজে বের করার জন্য ব্যবহার করা হয়।

২. Term Query

Term Query হল সবচেয়ে সাধারণ এবং সোজা অনুসন্ধান পদ্ধতি, যেখানে আপনি একটি নির্দিষ্ট শব্দ বা টার্মের জন্য অনুসন্ধান করেন। এটি ব্যবহার করা হয় যখন আপনি একটি নির্দিষ্ট শব্দের উপস্থিতি চেক করতে চান।

উদাহরণ: Term Query

import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.index.Term;

Term term = new Term("fieldName", "searchTerm");
Query query = new TermQuery(term);

এখানে, "fieldName" হলো ফিল্ডের নাম এবং "searchTerm" হলো যে শব্দটি আপনি খুঁজতে চান।


৩. Phrase Query

Phrase Query ব্যবহৃত হয় যখন আপনাকে একটি নির্দিষ্ট বাক্য বা বাক্যের মধ্যে শব্দগুলি নির্দিষ্ট অর্ডারে খুঁজতে হয়। এটি টার্ম কুয়েরি থেকে ভিন্ন, কারণ এতে শব্দগুলির অর্ডার গুরুত্বপূর্ণ।

উদাহরণ: Phrase Query

import org.apache.lucene.search.Query;
import org.apache.lucene.search.PhraseQuery;

PhraseQuery.Builder builder = new PhraseQuery.Builder();
builder.add(new Term("fieldName", "firstWord"));
builder.add(new Term("fieldName", "secondWord"));
Query query = builder.build();

এখানে, "firstWord" এবং "secondWord" দুটি শব্দ একটি নির্দিষ্ট অর্ডারে "fieldName" ফিল্ডে খুঁজতে হবে।


৪. Boolean Query

Boolean Query ব্যবহার করা হয় যখন আপনি একাধিক শর্ত বা টার্ম একসাথে সংযুক্ত করতে চান। এটি AND, OR, NOT অপারেটর ব্যবহার করে, যার মাধ্যমে খুবই নমনীয় অনুসন্ধান করা সম্ভব।

উদাহরণ: Boolean Query

import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.index.Term;

BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(new TermQuery(new Term("fieldName", "searchTerm1")), BooleanClause.Occur.MUST);
builder.add(new TermQuery(new Term("fieldName", "searchTerm2")), BooleanClause.Occur.MUST_NOT);
Query query = builder.build();

এখানে:

  • MUST: "searchTerm1" থাকতে হবে।
  • MUST_NOT: "searchTerm2" না থাকতে হবে।

৫. Wildcard Query

Wildcard Query ব্যবহার করা হয় যখন আপনি wildcards (যেমন * বা ?) ব্যবহার করে অনুসন্ধান করতে চান। * যেকোনো চরিত্র বা চরিত্রের সেটের প্রতিনিধিত্ব করে এবং ? একক চরিত্রের প্রতিনিধিত্ব করে।

উদাহরণ: Wildcard Query

import org.apache.lucene.search.Query;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.index.Term;

Query query = new WildcardQuery(new Term("fieldName", "search*"));

এখানে, "search*" অনুসন্ধান করবে এমন কোনো টার্ম যা search দিয়ে শুরু হয়, যেমন "searchterm", "searching" ইত্যাদি।


৬. Range Query

Range Query ব্যবহার করা হয় যখন আপনাকে কোনো নির্দিষ্ট রেঞ্জের মধ্যে ডেটা অনুসন্ধান করতে হয়, যেমন সংখ্যা বা তারিখের মধ্যে।

উদাহরণ: Range Query

import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermRangeQuery;

Query query = TermRangeQuery.newStringRange("fieldName", "startRange", "endRange", true, true);

এখানে, "startRange" এবং "endRange" হলো রেঞ্জের শুরুর এবং শেষ সীমা।


৭. Fuzzy Query

Fuzzy Query ব্যবহার করা হয় যখন আপনি কিছু অদৃশ্য বা ভুল স্পেলিং সহ শব্দের জন্য অনুসন্ধান করতে চান। এটি সাধারণত শব্দের মধ্যে একটু পরিবর্তন হওয়া (যেমন টাইপিং মিসটেক) সহ অনুসন্ধান করার জন্য ব্যবহৃত হয়।

উদাহরণ: Fuzzy Query

import org.apache.lucene.search.Query;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.index.Term;

Query query = new FuzzyQuery(new Term("fieldName", "searchTerm"));

এখানে, "searchTerm" শব্দটি কাছাকাছি শব্দের জন্য অনুসন্ধান করবে, যেমন "serchTerm" বা "serachTerm"


৮. Complete Example: Various Query Types for Searching

এখন, বিভিন্ন ধরনের Lucene Query এর সাহায্যে একটি অনুসন্ধান কীভাবে কাজ করে তা দেখব:

import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.index.Term;

import java.nio.file.Paths;

public class LuceneSearchExample {
    public static void main(String[] args) throws Exception {
        FSDirectory directory = FSDirectory.open(Paths.get("index"));
        DirectoryReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);
        
        // Term Query
        TermQuery termQuery = new TermQuery(new Term("fieldName", "searchTerm"));
        System.out.println("Term Query Results: " + searcher.search(termQuery, 10).totalHits);

        // Boolean Query
        BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
        booleanQuery.add(new TermQuery(new Term("fieldName", "searchTerm1")), BooleanQuery.Occur.MUST);
        booleanQuery.add(new TermQuery(new Term("fieldName", "searchTerm2")), BooleanQuery.Occur.MUST_NOT);
        System.out.println("Boolean Query Results: " + searcher.search(booleanQuery.build(), 10).totalHits);

        // Phrase Query
        PhraseQuery.Builder phraseQuery = new PhraseQuery.Builder();
        phraseQuery.add(new Term("fieldName", "searchTerm1"));
        phraseQuery.add(new Term("fieldName", "searchTerm2"));
        System.out.println("Phrase Query Results: " + searcher.search(phraseQuery.build(), 10).totalHits);

        // Wildcard Query
        WildcardQuery wildcardQuery = new WildcardQuery(new Term("fieldName", "search*"));
        System.out.println("Wildcard Query Results: " + searcher.search(wildcardQuery, 10).totalHits);
        
        // Close resources
        reader.close();
        directory.close();
    }
}

এই উদাহরণে, আমরা বিভিন্ন ধরনের Lucene Query ব্যবহার করে অনুসন্ধান করছি:

  1. Term Query - নির্দিষ্ট শব্দের জন্য অনুসন্ধান।
  2. Boolean Query - একাধিক শর্তের জন্য অনুসন্ধান।
  3. Phrase Query - বাক্য অনুসন্ধান।
  4. Wildcard Query - Wildcard ব্যবহার করে অনুসন্ধান।

সারাংশ

Lucene Query Types আপনাকে খুব নমনীয়ভাবে ডেটার মধ্যে অনুসন্ধান করতে সাহায্য করে। আপনি Term Query, Phrase Query, Boolean Query, Wildcard Query, Range Query, এবং Fuzzy Query ব্যবহার করে বিভিন্ন ধরনের ডেটা অনুসন্ধান করতে পারেন। Lucene অনুসন্ধানকে আরও উন্নত করতে Query Types একসাথে ব্যবহার করে খুবই কার্যকরী অনুসন্ধান তৈরি করা সম্ভব।


Content added By
Promotion

Are you sure to start over?

Loading...