সরাসরি প্রধান সামগ্রীতে চলে যান

PostgreSQL এবং Spring Data ব্যবহার করে সহজ ‘Fuzzy Search’ এর ধারণা

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]

  1. JPQL: এটি ভিডিওর স্পিকারের প্রিয় পদ্ধতি কারণ এটি সহজ এবং পরিষ্কার।

  2. Native Query: সরাসরি ডাটাবেসের ভাষায় সার্চ লেখা।

  3. 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)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...