Apache Lucene একটি শক্তিশালী এবং উচ্চ-দক্ষতাসম্পন্ন তথ্য অনুসন্ধান ইঞ্জিন যা ফ্রি টেক্সট সার্চিং এবং ইনডেক্সিং এর জন্য ব্যবহৃত হয়। লুসিনের মাধ্যমে আপনি ডকুমেন্ট ইনডেক্স করতে এবং অত্যন্ত দ্রুত এবং কার্যকরীভাবে কুয়েরি পরিচালনা করতে পারেন।
লুসিন বিভিন্ন ধরনের কুয়েরি সমর্থন করে, যার মধ্যে Wildcard Search এবং Regular Expressions Query অন্যতম। এগুলি বিশেষভাবে ব্যবহারকারীকে নির্দিষ্ট ধরণের অনুসন্ধানে সহায়তা করে যেখানে একটি নির্দিষ্ট প্যাটার্ন বা অংশ অনুসন্ধান করতে হয়।
এই টিউটোরিয়ালে, আমরা Wildcard Search এবং Regular Expressions Query সম্পর্কে বিস্তারিত আলোচনা করব।
১. Wildcard Search in Lucene
Wildcard Search হল এমন একটি অনুসন্ধান পদ্ধতি যা বিশেষ চিহ্ন ব্যবহার করে একটি প্যাটার্নের মধ্যে মিল থাকা শব্দ বা টেক্সট খুঁজে বের করে। এই চিহ্নগুলির মধ্যে * (অস্তিত্বহীন অক্ষরের জন্য) এবং ? (একটি নির্দিষ্ট অক্ষরের জন্য) ব্যবহার করা হয়।
*(Asterisk): এটি শূন্য বা একাধিক অক্ষরের প্রতিনিধিত্ব করে।?(Question mark): এটি একক অক্ষরের প্রতিনিধিত্ব করে।
Wildcard Search উদাহরণ
ধরা যাক, আপনার কাছে একটি ইনডেক্স করা টেক্সট ডকুমেন্ট রয়েছে, এবং আপনি এমন শব্দ খুঁজছেন যার মধ্যে "book" শব্দটি থাকবে, তবে শুরুতে একটি বা একাধিক অক্ষর থাকতে পারে।
WildcardQuery query = new WildcardQuery(new Term("content", "boo*"));
এখানে, boo* দিয়ে আপনি এমন সমস্ত টেক্সট খুঁজে বের করবেন যা "boo" দিয়ে শুরু হয় এবং তার পরে যেকোনো অক্ষর থাকতে পারে।
Wildcard Search Example: One character replacement
WildcardQuery query = new WildcardQuery(new Term("content", "b?ok"));
এখানে, b?ok দিয়ে আপনি "b" এবং "ok" দিয়ে ঘেরা এমন শব্দগুলো খুঁজে পাবেন যেখানে "?" একটি একক অক্ষরের প্রতিনিধিত্ব করবে (যেমন "book", "bork", "buck" ইত্যাদি)।
Wildcard Search এর সীমাবদ্ধতা
- Performance Impact: Wildcard search, বিশেষ করে
*(asterisk) এর ব্যবহার যদি শুরুতে হয়, তবে এটি সাধারণত কম পারফরম্যান্স প্রদান করে কারণ এটি ইনডেক্সের অধিকাংশ অংশ স্ক্যান করে। - Avoid Leading Wildcards:
*যদি শব্দের শুরুতে থাকে, যেমন*bookতবে এটি খুবই ধীর গতিতে কাজ করতে পারে।
২. Regular Expressions Query in Lucene
Regular Expressions (RegEx) একটি শক্তিশালী প্যাটার্ন ম্যাচিং প্রযুক্তি যা টেক্সটের মধ্যে নির্দিষ্ট প্যাটার্ন অনুসন্ধান করতে ব্যবহার করা হয়। লুসিনে RegularExpressionQuery ব্যবহার করে আপনি জটিল টেক্সট অনুসন্ধান করতে পারেন যা সাধারণ wildcard অনুসন্ধান দিয়ে করা সম্ভব নয়।
RegEx Query উদাহরণ
ধরা যাক, আপনি এমন সমস্ত ডকুমেন্ট খুঁজে বের করতে চান যেখানে শব্দটি “book” এর সাথে শুরু হয় এবং তার পরে একটি বা একাধিক সংখ্যা (0-9) থাকে।
RegexQuery query = new RegexQuery(new Term("content", "book[0-9]+"));
এখানে, book[0-9]+ একটি RegEx প্যাটার্ন যা "book" শব্দটি অনুসন্ধান করবে এবং তারপরে এক বা একাধিক ডিজিট (0-9) থাকতে হবে।
RegEx Query Example: Matching Word Ending
RegexQuery query = new RegexQuery(new Term("content", ".*book$"));
এখানে, .*book$ RegEx প্যাটার্নটি এমন সমস্ত শব্দ খুঁজে বের করবে যা "book" দিয়ে শেষ হয়।
RegEx Query-এর সুবিধা
- Complex Pattern Matching: RegEx Query দিয়ে আপনি আরও জটিল এবং নির্দিষ্ট প্যাটার্নের ভিত্তিতে অনুসন্ধান করতে পারেন।
- Greater Flexibility: এটি আপনাকে নির্দিষ্ট নিয়মে থাকা টেক্সট যেমন বিভিন্ন শব্দের সমন্বয়, বিশেষ চিহ্ন, অথবা সংখ্যার প্যাটার্ন অনুসন্ধান করতে সাহায্য করে।
RegEx Query এর সীমাবদ্ধতা
- Performance: RegEx queries সাধারণত wildcard এর চেয়ে ধীর গতিতে কাজ করতে পারে, কারণ এটি বেশি শক্তিশালী প্যাটার্ন ম্যাচিং চালায়।
- Complexity: RegEx প্যাটার্ন লিখতে এবং বুঝতে কিছুটা জটিল হতে পারে, বিশেষ করে যারা RegEx এ নতুন।
৩. Lucene তে Wildcard এবং Regular Expression Query এর মধ্যে পার্থক্য
| Feature | Wildcard Query | Regular Expression Query |
|---|---|---|
| Pattern | * and ? for wildcards | Full regular expression syntax |
| Use Case | Simple pattern matching | Complex pattern matching with more control |
| Performance | Less efficient with leading wildcards | Potentially slow with complex patterns |
| Flexibility | Limited to simple patterns | Greater flexibility with advanced patterns |
| Complexity | Simple to use | More complex syntax and understanding |
৪. Wildcard Search এবং Regular Expressions Query তে কাজ করার জন্য Tips
- Avoid Leading Wildcards: যদি সম্ভব হয়, ওয়াইল্ডকার্ড কুয়েরির জন্য
*বা?শব্দের শুরুতে ব্যবহার না করার চেষ্টা করুন। এটি পারফরম্যান্স কমিয়ে ফেলতে পারে। - Limit Regular Expression Usage: RegEx কুয়েরি ব্যবহার করার সময় প্রয়োজনে কেবলমাত্র সেই ক্ষেত্রগুলোতে ব্যবহার করুন যেখানে কুয়েরির প্যাটার্ন জটিল এবং wildcard query যথেষ্ট নয়।
- Use with Care: Wildcard এবং Regular Expression queries সবসময় ইনডেক্সিং পারফরম্যান্সে প্রভাব ফেলতে পারে, তাই বড় ডেটাবেসে এগুলি ব্যবহারের আগে প্রোফাইলিং করে দেখুন।
- Combine with Other Queries: Wildcard বা RegEx কুয়েরি অন্যান্য কুয়েরির সাথে সংমিশ্রিত হতে পারে, যেমন TermQuery বা BooleanQuery এর সাথে।
সারাংশ
Lucene তে Wildcard Search এবং Regular Expressions Query ব্যবহার করে আপনি টেক্সটের মধ্যে প্যাটার্ন ম্যাচিং করতে পারেন। Wildcard Query সরল প্যাটার্নের জন্য উপযুক্ত, যেখানে আপনি এক বা একাধিক অক্ষরের অনুসন্ধান করতে চান, এবং Regular Expressions Query আরো জটিল এবং নির্দিষ্ট প্যাটার্ন অনুসন্ধানে সহায়তা করে। তবে, এটি মনে রাখা গুরুত্বপূর্ণ যে এই ধরনের কুয়েরি পারফরম্যান্সের উপর প্রভাব ফেলতে পারে, বিশেষ করে যখন আপনার কাছে বড় ডেটাসেট থাকে।
তবে, সঠিকভাবে ব্যবহৃত হলে এই কুয়েরি টাইপগুলি আপনার অনুসন্ধান কার্যক্রমকে আরও নমনীয় এবং শক্তিশালী করে তুলতে সক্ষম।
Read more