Introduction
আজকাল যেকোনো অ্যাপ্লিকেশনে ‘সার্চ’ অপশন থাকাটা খুব সাধারণ বিষয়। কিন্তু সমস্যা হয় তখন, যখন ইউজার বানান ভুল করে বা আংশিক নাম লেখে। সাধারণত এই ধরণের উন্নত সার্চের জন্য আমরা ‘Elasticsearch’ এর মতো বড় ও জটিল টুল ব্যবহার করি। তবে এই ভিডিওতে থমাস গ্রাফেনস্টেইন দেখিয়েছেন যে, আপনার যদি অলরেডি একটি PostgreSQL ডাটাবেস থাকে, তবে আলাদা কোনো ভারী টুল ছাড়াই আপনি চমৎকার ‘Fuzzy Search’ (ভুল বানান বা কাছাকাছি মিল খুঁজে পাওয়ার সার্চ) তৈরি করতে পারেন। এতে সময় এবং খরচ দুটোই বাঁচে।
১. সাধারণ সার্চ বনাম ফাজি সার্চ (Fuzzy Search)
ভিডিওর শুরুতে সাধারণ সার্চের সীমাবদ্ধতা নিয়ে আলোচনা করা হয়েছে। [03:01] আমাদের সাধারণ LIKE অপারেটর দিয়ে সার্চ করলে একদম হুবহু মিল থাকতে হয়। কিন্তু মানুষ যখন কিবোর্ডে লেখে, তখন প্রায়ই টাইপিং ভুল (Typo) করে। যেমন: ‘Philip’ কে কেউ ‘Fillip’ লিখতে পারে। ফাজি সার্চের কাজ হলো এই ছোটখাটো ভুলগুলোকে ক্ষমা করে দিয়ে সঠিক রেজাল্ট খুঁজে বের করা।
-
রেফারেন্স: [06:19]
-
সহজ ব্যাখ্যা: ধরুন আপনি গুগলে কিছু সার্চ করছেন এবং বানান ভুল করলেন, গুগল তাও আপনাকে সঠিক রেজাল্ট দেখায়—এটাই মূলত ফাজি সার্চের একটি রূপ।
২. ট্রাইগ্রাম (Trigrams): সার্চের আসল জাদুকর
পোস্টগ্রেস (PostgreSQL) ডাটাবেসে ‘Trigram’ নামে একটি অসাধারণ ফিচার আছে। [11:26] ট্রাইগ্রাম মানে হলো একটি শব্দকে প্রতি ৩টি অক্ষরের ছোট ছোট টুকরোয় ভাগ করা। যেমন: ‘HELLO’ শব্দটিকে ‘HEL’, ‘ELL’, ‘LLO’ এভাবে ভাগ করা হয়। যখন ইউজার কোনো ভুল বানান লিখে সার্চ দেয়, তখন ডাটাবেস চেক করে দেখে যে ইউজারের দেওয়া শব্দের টুকরোগুলোর সাথে ডাটাবেসের শব্দের টুকরোগুলোর কতটা মিল আছে।
-
রেফারেন্স: [13:35]
-
কঠিন শব্দ (Trigram): এটি একটি ল্যাটিন শব্দ ‘Tri’ (তিন) থেকে এসেছে। সহজ কথায়, যেকোনো শব্দের তিন অক্ষরের সেট।
-
আমার চিন্তা: এটি অনেকটা পাজল মেলানোর মতো। পুরো ছবি না মিললেও যদি বেশির ভাগ টুকরো মিলে যায়, তবে আমরা ধরে নিই এটি সেই কাঙ্ক্ষিত ছবি।
৩. ইনডেক্সিং: সার্চকে দ্রুত করার উপায়
ডাটাবেসে অনেক ডেটা থাকলে সার্চ স্লো হয়ে যায়। তাই ভিডিওতে দুটি ইনডেক্স নিয়ে কথা বলা হয়েছে: GiST এবং GIN। [19:24]
-
GIN Index: এটি সার্চের জন্য অনেক বেশি ফাস্ট (দ্রুত), কিন্তু ডেটা সেভ করার সময় একটু সময় নেয়। এটি স্ট্যাটিক বা স্থির ডেটার (যেমন: কাস্টমার লিস্ট) জন্য সেরা। [21:43]
-
GiST Index: এটি সাইজে ছোট এবং ডেটা বারবার আপডেট হলে ভালো কাজ করে।
৪. Spring Data JPA তে কোডিং প্রয়োগ
ভিডিওর এই অংশে দেখানো হয়েছে কীভাবে জাভা বা কটলিন কোড দিয়ে এই সার্চ সুবিধা যোগ করা যায়। হিবারনেট (Hibernate) সরাসরি ট্রাইগ্রাম চেনে না, তাই আমাদের একটি কাস্টম ফাংশন লিখে দিতে হয়। [28:48]
Kotlin
// Hibernate কে নতুন সার্চ অপারেটর চেনানোর জন্য কাস্টম ফাংশন
class MyFunctionContributor : FunctionContributor {
override fun contributeFunctions(functionContributions: FunctionContributions) {
functionContributions.functionRegistry
.registerNamed("word_similarity",
SqmFunctionDescriptorBuilder(StandardFunctionReturnTypeResolvers.DOUBLE)
.arguments(SqmArgumentTypeResolvers.STRING, SqmArgumentTypeResolvers.STRING)
.rendering { arguments ->
"word_similarity(${arguments[0]}, ${arguments[1]})"
}.build())
}
}
ব্যাখ্যা: এই কোডটি মূলত ডাটাবেস এবং আমাদের অ্যাপ্লিকেশনের মধ্যে একটি ব্রিজ তৈরি করে। এর ফলে আমরা সরাসরি কোড থেকে ডাটাবেসের বিশেষ সার্চ পাওয়ার ব্যবহার করতে পারি।
৫. ভিন্ন ভিন্ন পদ্ধতিতে সার্চ কল করা
ডেটাবেস থেকে তথ্য আনার জন্য ডেভেলপাররা ৩টি পদ্ধতি ব্যবহার করতে পারেন: [30:44]
-
JPQL: এটি ভিডিওর স্পিকারের প্রিয় পদ্ধতি কারণ এটি সহজ এবং পরিষ্কার।
-
Native Query: সরাসরি ডাটাবেসের ভাষায় সার্চ লেখা।
-
Specifications: এটি ডায়নামিক সার্চের জন্য ভালো হলেও এতে কিছু টেকনিক্যাল সমস্যা (যেমন Prepared Statement না হওয়া) থাকতে পারে।
- টিপস: সবসময় JPQL বা Native Query ব্যবহার করার চেষ্টা করুন যাতে পারফরম্যান্স ভালো থাকে। [39:02]
এনালাইসিস এবং শেষ কথা
আমার বিশ্লেষণ ও বাস্তবতা: কন্টেন্ট ক্রিয়েটর এখানে একটি খুব বাস্তবসম্মত পয়েন্ট তুলে ধরেছেন—"সহজ দিয়ে শুরু করুন"। আমরা অনেক সময় হুজুগে পড়ে দামি এবং জটিল টুল (যেমন Elasticsearch) ব্যবহার শুরু করি, যা মেইনটেইন করা কঠিন। যদি আপনার প্রজেক্টের সার্চের প্রয়োজনীয়তা খুব বেশি বিশাল না হয়, তবে PostgreSQL এর এই ট্রাইগ্রাম মেথডটি সেরা বিকল্প।
পরামর্শ:
-
আপনার যদি কয়েক মিলিয়ন ডেটা থাকে এবং খুব অ্যাডভান্সড র্যাঙ্কিং লাগে, তবেই শুধু আলাদা সার্চ ইঞ্জিন ব্যবহার করুন।
-
ছোট বা মাঝারি প্রজেক্টের জন্য এই ট্রাইগ্রাম সার্চ ব্যবহার করলে আপনার সার্ভারের মেমোরি এবং জটিলতা অনেক কমবে।
-
বিকল্প হিসেবে আপনি PostgreSQL এর Full Text Search (FTS) ও দেখতে পারেন, যা বড় টেক্সট বা ডকুমেন্টের জন্য ভালো।
উপসংহার: নতুন কিছু শেখার আগে হাতের কাছের টুলের ক্ষমতা কতটুকু তা জেনে নেওয়া বুদ্ধিমানের কাজ। এই ভিডিওটি আমাদের সেই শিক্ষাই দেয়।
[
You don't need Elasticsearch! Fuzzy Search with PostgreSQL and Spring Data by Thomas Gräfenstein
Spring I/O · 8.5K views
](http://www.youtube.com/watch?v=2kARdnzB5Gg)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d