QueryParser এর মাধ্যমে Complex Query তৈরি করা

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

253

Lucene একটি powerful information retrieval লাইব্রেরি যা ডেটা ইন্ডেক্সিং এবং সার্চিংয়ের জন্য ব্যবহৃত হয়। এটি জাভা ভিত্তিক এবং মূলত টেক্সট ডকুমেন্টের মধ্যে দ্রুত সার্চ এবং রিট্রিভাল করার জন্য ব্যবহৃত হয়। QueryParser হল Lucene এর একটি গুরুত্বপূর্ণ অংশ যা ব্যবহারকারীদের complex query তৈরি করতে সক্ষম করে, যেমন Boolean queries, wildcard queries, ফিল্টারিং, এবং প্যাটার্ন ম্যাচিং ইত্যাদি।

এই টিউটোরিয়ালে, আমরা QueryParser এর মাধ্যমে কীভাবে complex query তৈরি করা যায় এবং এটি কিভাবে কার্যকরীভাবে কাজ করে তা আলোচনা করব।


১. QueryParser এর ভূমিকা

QueryParser হল Lucene এর একটি ক্লাস যা Lucene Query Syntax ব্যবহার করে সার্চ কন্ডিশন বা কুয়েরি তৈরি করতে সাহায্য করে। এটি একটি string ইনপুট গ্রহণ করে এবং এটি একটি Lucene Query Object তে রূপান্তরিত করে।

QueryParser ব্যবহার করে আপনি full-text search, Boolean search, wildcard search, range search, এবং আরও অনেক ধরনের complex query তৈরি করতে পারেন।


২. QueryParser এর মূল সুবিধা

  1. Text Query Parsing: QueryParser ব্যবহারকারীদের লেখনির মাধ্যমে সাধারণ ও জটিল প্রশ্ন তৈরি করার সুযোগ দেয়।
  2. Flexible Query Types: Boolean, Phrase, Range, Wildcard, Fuzzy queries এর মতো একাধিক কুয়েরি টাইপ সাপোর্ট করে।
  3. Search Optimization: পারফরম্যান্স উন্নত করতে সঠিক এবং কার্যকরী কুয়েরি তৈরি করতে সাহায্য করে।

৩. QueryParser এর সাথে Simple Query তৈরি

QueryParser দিয়ে আপনি খুব সহজেই সাধারণ queries তৈরি করতে পারেন। নিম্নলিখিত উদাহরণে Lucene Query তৈরি করা হয়েছে।

উদাহরণ: Simple Query

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.QueryParser;
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 java.nio.file.Paths;

public class SimpleQueryExample {
    public static void main(String[] args) throws Exception {
        // Index Directory
        FSDirectory directory = FSDirectory.open(Paths.get("index"));

        // Index Reader and Searcher
        DirectoryReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // Create QueryParser
        StandardAnalyzer analyzer = new StandardAnalyzer();
        QueryParser parser = new QueryParser("content", analyzer);
        
        // Parse a simple query
        String queryString = "java";
        Query query = parser.parse(queryString);

        // Search and display results
        System.out.println("Searching for: " + queryString);
        System.out.println("Total Results: " + searcher.count(query));

        reader.close();
    }
}

এখানে, QueryParser দিয়ে একটি সাধারণ কুয়েরি "java" তৈরি করা হয়েছে যা ইন্ডেক্সের content ফিল্ডে সার্চ করবে।


৪. Complex Query তৈরি করা QueryParser এর মাধ্যমে

এখন, আসুন complex queries তৈরি করি, যেমন Boolean Query, Phrase Query, Wildcard Query, এবং Range Query

৪.১ Boolean Query

Boolean Query ব্যবহার করে আপনি একাধিক শর্তকে যুক্ত বা বাদ দিতে পারেন (যেমন AND, OR, NOT)। এটি কমপ্লেক্স সার্চ ইস্যুগুলির জন্য উপকারী।

import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanClause;

QueryParser parser = new QueryParser("content", analyzer);

// Create a boolean query that includes two conditions
BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(parser.parse("java"), BooleanClause.Occur.MUST);
builder.add(parser.parse("lucene"), BooleanClause.Occur.MUST_NOT);
BooleanQuery booleanQuery = builder.build();

এখানে, "java" শব্দটি MUST (অবশ্যই থাকতে হবে) এবং "lucene" শব্দটি MUST_NOT (থাকতে হবে না) থাকবে।

৪.২ Phrase Query

Phrase Query ব্যবহার করে আপনি যেকোনো নির্দিষ্ট শব্দের সিকোয়েন্সে সার্চ করতে পারেন।

Query phraseQuery = new QueryParser("content", analyzer).parse("\"Java Lucene tutorial\"");

এখানে, "Java Lucene tutorial" একটি নির্দিষ্ট শব্দের সিকোয়েন্স হিসেবে মানা হচ্ছে, অর্থাৎ, এই নির্দিষ্ট সিকোয়েন্সটি ডকুমেন্টে থাকতে হবে।

৪.৩ Wildcard Query

Wildcard Query দিয়ে আপনি ডকুমেন্টের মধ্যে আংশিক ম্যাচিং করতে পারেন, যেমন * এবং ? ব্যবহার করে।

Query wildcardQuery = new QueryParser("content", analyzer).parse("java*");

এখানে, java* দ্বারা সমস্ত শব্দ যেগুলি "java" দিয়ে শুরু হয় (যেমন "java", "javac", "javascript" ইত্যাদি) সার্চ করা হবে।

৪.৪ Range Query

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

Query rangeQuery = new QueryParser("date", analyzer).parse("[2020-01-01 TO 2022-01-01]");

এখানে, ডেটার মধ্যে ২০২০-০১-০১ থেকে ২০২২-০১-০১ এর মধ্যে কোন মান থাকবে এমন ডকুমেন্ট খুঁজবে।


৫. QueryParser ব্যবহার করে Query বেলিডেশন

QueryParser একাধিক ফিচার সমর্থন করে এবং ডিফল্ট সিম্বোলিক কুয়েরি সঠিকভাবে পার্স করার মাধ্যমে ব্যবহারকারীদের জন্য একটি নিরাপদ এবং কার্যকরী সার্চ অভিজ্ঞতা তৈরি করে। এটি ইন্টারনাল কোডে আংশিক কুয়েরি অথবা ভুল কুয়েরি যাচাই করার জন্য খুবই কার্যকরী।

উদাহরণ: Query Validation

try {
    String queryString = "java AND lucene OR tutorial";
    Query query = parser.parse(queryString);
    // Execute search
} catch (Exception e) {
    System.err.println("Query parse error: " + e.getMessage());
}

এখানে, ভুল বা অস্বীকৃত কুয়েরি সিনট্যাক্স হলে, এটি Exception ফেলে দেয়, যা আমাদের লগিং বা সমস্যার সমাধানে সহায়ক হবে।


৬. QueryParser ব্যবহার করে Search Execution

একবার কুয়েরি তৈরি হলে, আপনি IndexSearcher ব্যবহার করে ইন্ডেক্সে সার্চ করতে পারেন এবং রেজাল্ট প্রসেস করতে পারেন।

উদাহরণ: Search Execution

TopDocs results = searcher.search(query, 10); // Search for the first 10 results
ScoreDoc[] hits = results.scoreDocs;

for (ScoreDoc hit : hits) {
    Document doc = searcher.doc(hit.doc);
    System.out.println(doc.get("content"));
}

এখানে, searcher.search(query, 10) কুয়েরি চালিয়ে প্রথম ১০টি রেজাল্ট খুঁজে বের করবে এবং প্রতিটি রেজাল্টের content ফিল্ড প্রিন্ট করবে।


সারাংশ

Lucene QueryParser একটি শক্তিশালী টুল যা ব্যবহারকারীদের জন্য সহজে complex query তৈরি করার সুযোগ দেয়। এটি Boolean, Phrase, Wildcard, এবং Range queries এর মতো বিভিন্ন ধরনের কুয়েরি তৈরি করতে সাহায্য করে, যা Lucene সার্চ ইঞ্জিনের সাথে দ্রুত এবং নির্ভুল সার্চ কার্যকরী করতে ব্যবহৃত হয়। QueryParser একটি সিম্পল এবং ইফিশিয়েন্ট পদ্ধতি প্রদান করে যে কিভাবে আপনি টেক্সট ডকুমেন্টে ভিন্ন ধরনের কুয়েরি প্রয়োগ করবেন।


Content added By
Promotion

Are you sure to start over?

Loading...