Lucene হল একটি শক্তিশালী, ওপেন সোর্স লুকআপ এবং ইনডেক্সিং লাইব্রেরি যা Java-ভিত্তিক অ্যাপ্লিকেশনগুলিতে দ্রুত এবং দক্ষ সার্চ সেবা প্রদান করতে ব্যবহৃত হয়। Lucene আপনাকে টেক্সট ডেটা ইনডেক্স করতে এবং তার পর বিভিন্ন ধরনের সার্চ কুয়েরি পরিচালনা করতে সহায়তা করে।
এই টিউটোরিয়ালে, আমরা Faceted Search এবং Aggregated Search Result তৈরির পদ্ধতি নিয়ে আলোচনা করব, যা Lucene তে সার্চ রেজাল্টস আরও কাঠামোবদ্ধ এবং উপযোগী করে তোলে।
১. Faceted Search এর ধারণা
Faceted Search এমন একটি সার্চ পদ্ধতি যেখানে সার্চ রেজাল্টগুলোকে বিভিন্ন ক্যাটাগরিতে বিভক্ত করা হয়, যাতে ব্যবহারকারীরা তাদের সার্চ ফলাফল সহজে ফিল্টার করতে পারেন। একাধিক ফেসেট তৈরি করা হয়, যেমন কেটাগরি, প্রাইস রেঞ্জ, রেটিং ইত্যাদি, যা ব্যবহারকারীর সার্চ এক্সপেরিয়েন্স উন্নত করে।
Faceted Search এর সুবিধা:
- ব্যবহারকারীরা সার্চ রেজাল্টগুলোকে ফিল্টার করতে পারে।
- একাধিক ফেসেট ব্যবহার করে বিভিন্ন ভিউ এবং আউটপুট তৈরি করা যায়।
- ব্যবহারকারীর সার্চ এক্সপেরিয়েন্স আরও ইন্টারঅ্যাকটিভ এবং সুগম হয়ে ওঠে।
২. Lucene তে Faceted Search তৈরি করা
Lucene তে Faceted Search বাস্তবায়ন করার জন্য, আমরা Taxonomy এবং Facets API ব্যবহার করতে পারি। Taxonomy API ফেসেট তৈরি করতে সহায়তা করে, এবং Facet fields আপনাকে টেক্সট ডেটাকে বিভিন্ন ফেসেটে ভাগ করতে সাহায্য করে।
উদাহরণ: Faceted Search
ধরা যাক, আমাদের একটি প্রোডাক্ট ডেটাবেস রয়েছে, যেখানে প্রোডাক্টের নাম, কেটাগরি, প্রাইস রেঞ্জ এবং রেটিং রয়েছে। এখন আমরা Lucene তে Faceted Search তৈরি করতে চাই।
২.১ Dependency (Maven)
<dependencies>
<!-- Lucene Core Dependency -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>8.11.0</version>
</dependency>
<!-- Lucene Facet Module -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-facet</artifactId>
<version>8.11.0</version>
</dependency>
</dependencies>
২.২ Faceted Indexing
import org.apache.lucene.document.*;
import org.apache.lucene.index.*;
import org.apache.lucene.store.*;
import org.apache.lucene.facet.*;
import org.apache.lucene.facet.taxonomy.*;
import org.apache.lucene.facet.FacetField;
public class FacetedIndexing {
public static void main(String[] args) throws Exception {
Directory directory = FSDirectory.open(Paths.get("index"));
IndexWriterConfig config = new IndexWriterConfig();
IndexWriter writer = new IndexWriter(directory, config);
TaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(FSDirectory.open(Paths.get("taxonomy")));
Document doc = new Document();
doc.add(new StringField("product_name", "Smartphone", Field.Store.YES));
doc.add(new IntPoint("price", 599));
doc.add(new FacetField("category", "Electronics"));
doc.add(new FacetField("rating", "4"));
writer.addDocument(doc);
writer.commit();
writer.close();
taxoWriter.close();
}
}
এই উদাহরণে, product_name, price, category, এবং rating ফিল্ড ব্যবহার করে ফেসেট তৈরি করা হচ্ছে।
২.৩ Faceted Search
import org.apache.lucene.search.*;
import org.apache.lucene.facet.*;
public class FacetedSearch {
public static void main(String[] args) throws Exception {
Directory directory = FSDirectory.open(Paths.get("index"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
TaxonomyReader taxoReader = new DirectoryTaxonomyReader(FSDirectory.open(Paths.get("taxonomy")));
FacetsCollector facetsCollector = new FacetsCollector();
Query query = new TermQuery(new Term("product_name", "Smartphone"));
searcher.search(query, facetsCollector);
Facets facets = new FacetsConfig();
FacetsResult result = facets.getAllFacets(facetsCollector);
System.out.println("Faceted search result: " + result);
}
}
এখানে, FacetsCollector ব্যবহার করে আমরা সার্চ রেজাল্ট সংগ্রহ করছি এবং Facets API দিয়ে সেগুলোকে ফেসেটে বিভক্ত করছি। এতে প্রোডাক্টের কেটাগরি এবং রেটিং অনুযায়ী ফিল্টার করা যাবে।
৩. Aggregated Search Result এর ধারণা
Aggregated Search Results হলো এমন সার্চ রেজাল্ট যেখানে একাধিক সার্চ রেজাল্টের উপর নির্দিষ্ট অপারেশন (যেমন, গড় মূল্য, সর্বোচ্চ রেটিং) প্রয়োগ করা হয়। এটি ব্যবহারকারীদের সার্চ রেজাল্টগুলোকে আরও কার্যকরী এবং অন্তর্দৃষ্টিপূর্ণ করে তোলে।
Aggregated Search এর সুবিধা:
- ব্যবহারকারীরা সার্চ রেজাল্টের উপর বিভিন্ন পরিসংখ্যানিক বিশ্লেষণ দেখতে পারেন।
- এটির মাধ্যমে আপনি সার্চ রেজাল্টের মধ্যে তথ্যের অগ্রাধিকার চিহ্নিত করতে পারেন।
- এটি ব্যবহারকারীদের বিভিন্ন ডেটা প্যাটার্নে সাজানো আউটপুট প্রদান করে।
৪. Lucene তে Aggregated Search Result তৈরি করা
Lucene তে Aggregated Search করতে হলে, আপনাকে ফিল্ডগুলির উপর Aggregation Queries চালাতে হবে এবং তাদের সাথে সংশ্লিষ্ট তথ্য একত্রিত করতে হবে। এটা সাধারাণভাবে Facets API অথবা GroupBy কৌশল ব্যবহার করে করা যায়।
উদাহরণ: Aggregated Search
ধরা যাক, আমাদের একটি ইকমার্স ডেটাবেস রয়েছে এবং আমরা গ্রাহকদের Price এবং Rating এর গড় মান বের করতে চাই।
৪.১ Aggregation Indexing
Document doc = new Document();
doc.add(new StringField("product_name", "Smartphone", Field.Store.YES));
doc.add(new IntPoint("price", 599));
doc.add(new FacetField("category", "Electronics"));
doc.add(new FacetField("rating", "4"));
writer.addDocument(doc);
৪.২ Aggregated Search Query
import org.apache.lucene.facet.*;
import org.apache.lucene.facet.taxonomy.*;
public class AggregatedSearch {
public static void main(String[] args) throws Exception {
Directory directory = FSDirectory.open(Paths.get("index"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
TaxonomyReader taxoReader = new DirectoryTaxonomyReader(FSDirectory.open(Paths.get("taxonomy")));
FacetsCollector facetsCollector = new FacetsCollector();
Query query = new TermQuery(new Term("category", "Electronics"));
searcher.search(query, facetsCollector);
// Aggregating results
Facets facets = new FacetsConfig();
FacetsResult result = facets.getAllFacets(facetsCollector);
System.out.println("Aggregated search result: " + result);
}
}
এখানে, আমরা category অনুসারে সার্চ করেছি এবং তারপর FacetsCollector ব্যবহার করে ফেসেট রেজাল্ট বের করেছি। একইভাবে, আপনি price বা rating অনুযায়ী ডেটা গ্রুপ এবং অ্যাগ্রিগেট করতে পারেন।
৫. Faceted এবং Aggregated Search এর পার্থক্য
- Faceted Search: এটি ব্যবহারকারীদের নির্দিষ্ট ফিল্টার বা ক্যাটাগরি অনুযায়ী সার্চ রেজাল্টগুলো সনাক্ত এবং ফিল্টার করার সুযোগ দেয়।
- Aggregated Search: এটি সার্চ রেজাল্টগুলোকে সংক্ষেপ করে এবং পরিসংখ্যানিক বিশ্লেষণ প্রদান করে, যেমন গড় মূল্য, সর্বোচ্চ রেটিং ইত্যাদি।
সারাংশ
Faceted Search এবং Aggregated Search দুটি গুরুত্বপূর্ণ কৌশল যা Lucene তে ব্যবহারকারীদের সার্চ রেজাল্ট আরও কাঠামোবদ্ধ এবং তথ্যসমৃদ্ধ করে তোলে। Faceted Search বিভিন্ন ফিল্টার বা ক্যাটাগরির মাধ্যমে ডেটা সেগমেন্ট করে এবং Aggregated Search সার্চ রেজাল্টের উপর নির্দিষ্ট পরিসংখ্যানিক বিশ্লেষণ যেমন গড়, সর্বোচ্চ, সর্বনিম্ন ইত্যাদি প্রদান করে। Lucene এর Facets API এবং FacetsCollector ব্যবহার করে এই দুটি কৌশল বাস্তবায়ন করা সম্ভব।
Read more