Custom Sorting Criteria যোগ করা

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

268

Apache Lucene একটি জনপ্রিয় ওপেন সোর্স সার্চ লাইব্রেরি যা আপনাকে বিভিন্ন ডেটা সার্চ, ইনডেক্সিং এবং র্যাংকিং সিস্টেম তৈরি করতে সহায়তা করে। Lucene এ Custom Sorting Criteria যোগ করা সাধারণত Search Results Sorting এর মাধ্যমে করা হয়, যেখানে ব্যবহারকারী বিভিন্ন কাস্টম প্যারামিটার অনুযায়ী রেজাল্ট সাজাতে পারে।

Lucene এ Sorting কাজ করার পদ্ধতি সাধারণত Query এর সাথে যুক্ত থাকে, এবং এটি Sort ক্লাসের মাধ্যমে কাস্টম সোরটিং করতে সহায়তা করে। কাস্টম সোরটিং মূলত Numeric Field Sorting, Text Field Sorting, এবং Date Field Sorting সহ অন্যান্য ক্ষেত্রেও প্রয়োগ করা যায়।

এই টিউটোরিয়ালে আমরা দেখব কিভাবে Lucene এ কাস্টম সোরটিং করা যায় এবং কিভাবে এটি প্রয়োগ করা হয়।


১. Lucene Query Result Sorting এর ধারণা

Lucene সার্চ রেজাল্টকে নির্দিষ্ট Field বা Criteria অনুযায়ী সাজানোর জন্য Sort ক্লাস ব্যবহার করা হয়। এটি আপনাকে রেজাল্টগুলিকে ইনডেক্স করা Field এর উপর ভিত্তি করে সাজাতে সহায়তা করে। Lucene ডিফল্টভাবে relevance scoring এর মাধ্যমে সার্চ রেজাল্ট র্যাংক করে, কিন্তু আপনি যদি কাস্টম সোরটিং চান, তাহলে আপনাকে SortField ব্যবহার করতে হবে।


২. Lucene এ Custom Sorting Criteria যোগ করার জন্য SortField ব্যবহার করা

SortField ক্লাস হল Lucene এ একটি Field এর উপর ভিত্তি করে কাস্টম সোরটিং করার জন্য ব্যবহৃত ক্লাস। এই ক্লাসের মাধ্যমে আপনি যে কোন Field এ সোরটিং অ্যাপ্লাই করতে পারেন, যেমন String, Date, Integer, Numeric, এবং Float ফিল্ডে সোরটিং।

উদাহরণ: Custom Sorting Criteria যোগ করা

ধরা যাক, আমাদের একটি ইনডেক্সে Product ডেটা রয়েছে এবং আমরা চাই যে price ফিল্ড অনুযায়ী রেজাল্টগুলো সোরট করা হোক।

Step 1: Create Product Index with a Numeric Field

প্রথমে, Lucene IndexWriter ব্যবহার করে ইনডেক্স তৈরি করতে হবে। এখানে price ফিল্ডটি একটি numeric field হিসেবে ইনডেক্স করা হচ্ছে।

IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
IndexWriter writer = new IndexWriter(directory, config);

Document doc = new Document();
doc.add(new StringField("productName", "Product 1", Field.Store.YES));
doc.add(new IntPoint("price", 100));
doc.add(new StoredField("price", 100));
writer.addDocument(doc);

doc = new Document();
doc.add(new StringField("productName", "Product 2", Field.Store.YES));
doc.add(new IntPoint("price", 200));
doc.add(new StoredField("price", 200));
writer.addDocument(doc);

writer.close();

এখানে, আমরা একটি productName এবং price ফিল্ড তৈরি করেছি, যেখানে price ফিল্ডটি IntPoint হিসেবে ইনডেক্স করা হচ্ছে (যেহেতু এটি একটি সংখ্যা)।

Step 2: Perform Search with Custom Sorting

এখন, আমরা একটি Query ব্যবহার করব এবং ফলাফলগুলি price এর উপর ভিত্তি করে সোরট করব।

DirectoryReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);

// Create a query to search for all products
Query query = new MatchAllDocsQuery();

// Create a Sort object to sort the results by price field in ascending order
Sort sort = new Sort(new SortField("price", SortField.Type.INT));

// Perform the search with sorting
TopDocs topDocs = searcher.search(query, 10, sort);

// Display sorted results
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
    Document doc = searcher.doc(scoreDoc.doc);
    System.out.println("Product Name: " + doc.get("productName") + ", Price: " + doc.get("price"));
}

reader.close();

এখানে:

  • MatchAllDocsQuery ব্যবহার করা হয়েছে যাতে সব ডকুমেন্ট সার্চ করা যায়।
  • SortField ক্লাস ব্যবহার করে আমরা price ফিল্ডের উপর সোরটিং করলাম। SortField.Type.INT ব্যবহার করা হয়েছে যেহেতু আমরা একটি integer টাইপের ফিল্ডে সোরটিং করছি।
  • searcher.search(query, 10, sort) এর মাধ্যমে সার্চ রেজাল্ট ১০টি রেজাল্ট পর্যন্ত সোরট করা হয়েছে।
Step 3: Result Output

এই কোড চালানোর পর, আপনার রেজাল্টগুলো price অনুযায়ী সোরটেড হবে:

Product Name: Product 1, Price: 100
Product Name: Product 2, Price: 200

এখানে, Product 1 এর মূল্য কম হওয়ায় এটি প্রথমে আসবে, এবং Product 2 দ্বিতীয় হবে।


৩. Custom Sorting with Date and String Fields

Lucene এ আপনি শুধু numeric fields নয়, date এবং string fields এর উপরও কাস্টম সোরটিং করতে পারেন।

Date Field Sorting Example:

// Create DateField for product creation date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2024-01-01");
Date date2 = sdf.parse("2023-01-01");

// Add documents with date fields
Document doc = new Document();
doc.add(new StringField("productName", "Product 1", Field.Store.YES));
doc.add(new SortedDocValuesField("date", new BytesRef(sdf.format(date1))));
writer.addDocument(doc);

doc = new Document();
doc.add(new StringField("productName", "Product 2", Field.Store.YES));
doc.add(new SortedDocValuesField("date", new BytesRef(sdf.format(date2))));
writer.addDocument(doc);

// Sort by date
Sort sortByDate = new Sort(new SortField("date", SortField.Type.STRING));
TopDocs topDocsByDate = searcher.search(query, 10, sortByDate);

এখানে, আমরা SortedDocValuesField ব্যবহার করে date ফিল্ডকে সোরট করলাম।


৪. Sorting by Multiple Fields

Lucene এ আপনি একাধিক ফিল্ডের উপর সোরটিং করতে পারেন। উদাহরণস্বরূপ, price এবং date এর উপর সোরটিং:

Sort sortByPriceAndDate = new Sort(
    new SortField("price", SortField.Type.INT),
    new SortField("date", SortField.Type.STRING)
);
TopDocs topDocsByMultipleFields = searcher.search(query, 10, sortByPriceAndDate);

এখানে, প্রথমে price ফিল্ডের উপর সোরটিং হবে এবং তারপর date ফিল্ডে সোরটিং করা হবে।


৫. Lucene এর SortField এবং Sorting Options

Lucene এ আপনি বিভিন্ন ধরণের সোরটিং অপশন ব্যবহার করতে পারেন:

  • SortField.Type.INT: integer ফিল্ডে সোরটিং।
  • SortField.Type.STRING: string ফিল্ডে সোরটিং।
  • SortField.Type.FLOAT: float ফিল্ডে সোরটিং।
  • SortField.Type.DATE: date ফিল্ডে সোরটিং।
  • SortField.Type.LONG: long টাইপের ফিল্ডে সোরটিং।

এছাড়া, SortField-এর মাধ্যমে আপনি ascending বা descending অর্ডারে সোরটিং করতে পারবেন।

Sort sortDesc = new Sort(new SortField("price", SortField.Type.INT, true));  // Descending

এখানে true দিয়ে descending অর্ডারে সোরটিং করা হচ্ছে।


সারাংশ

LuceneCustom Sorting Criteria যোগ করা SortField এবং Sort ক্লাসের মাধ্যমে করা হয়। Lucene এর মাধ্যমে আপনি numeric, date, string, এবং অন্যান্য কাস্টম ফিল্ডে সোরটিং প্রয়োগ করতে পারেন। আপনি একাধিক ফিল্ডে সোরটিং, ascending অথবা descending অর্ডারে সোরটিং এবং বিভিন্ন field types এর উপর সোরটিং করতে পারবেন। এটি সার্চ রেজাল্টের কার্যকারিতা এবং ইউজার ইন্টারফেসে তথ্য উপস্থাপন আরও উন্নত করতে সহায়ক।


Content added By
Promotion

Are you sure to start over?

Loading...