পাঠ্যক্রম খুলুন
মধ্যবর্তী পর্যায়

Full-Text Search: inverted index ও শব্দভিত্তিক খোঁজ

Full-Text Search and Inverted Indexes

এই পাঠের কুইজ ↓৫ মিনিট পড়াPHP 8.3+ · Laravel 12
আগে পড়ে নিনDatabase Index: B-tree ও composite index ↗
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • Inverted index ও linguistic processing
  • Ranking, filters ও freshness
  • PostgreSQL simple configuration-এ Laravel query

সমস্যা দিয়ে শুরু

Book search-এ LIKE %design% চলছে। User typo করলে result নেই, বড় table-এ scan ধীর, আর relevant title নিচে। Full-text search শব্দভিত্তিক index ও ranking দেয়। তবে বাংলা tokenization, stemming ও mixed English content-এর behavior chosen engine/configuration-এ পরীক্ষা করতে হয়; English default সব ভাষার জন্য যথেষ্ট নয়।

সহজ করে বুঝি

Inverted index term থেকে matching document IDs map করে। Text analysis tokenization, normalization, stopword removal বা stemming করতে পারে। Query সেই analysis-এর compatible path নিলে match হয়। Ranking term frequency, field weight ও engine-specific signals ব্যবহার করতে পারে। Structured permission/category filter full-text query-এর সঙ্গে লাগাতে হবে। Search projection source থেকে async update হলে lag হতে পারে; removed/private document search result-এ leak ঠেকাতে access boundary গুরুত্বপূর্ণ।

পরিচিত একটি উপমা

বইয়ের শেষে keyword index-এ “cache” দেখে relevant page numbers পাওয়া যায়। এটি শুরু থেকে সব পৃষ্ঠা scan করার বিকল্প। কিন্তু একই ধারণার বাংলা/English শব্দ index-এ না থাকলে শুধু index থাকায় মিলবে না; vocabulary ও analysis দরকার।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Document ও query analysis compatible হতে হবে।
Diagram-এর text flow দেখুন
flowchart TD
 D[Source documents] --> T[Tokenize and normalize]
 T --> I[(Inverted index)]
 Q[User query] --> N[Compatible query analysis]
 N --> M[Match and rank]
 I --> M
 M --> F[Permission and bounded results]

Document ও query analysis compatible হতে হবে। Index candidate IDs দেয়, ranking order তৈরি করে। Permission filtering খুব শেষে unbounded data নিয়ে করা efficient বা safe নয়; index/query layer-এ authorized scope রাখুন এবং final source accessও যাচাই করুন। Diagram-এর final box bound ও access requirement বোঝায়।

PHP ও Laravel-এ প্রয়োগ

Laravel service fragment PostgreSQL-specific। books table title/public flag আছে; query validated string max ২০০ characters এবং response max২০ rows। simple configuration ভাষাগত stemming করে না; বাংলা segmentation/relevance solution দাবি করা হচ্ছে না। Same expression-এর GIN index migration আলাদা যোগ করে EXPLAIN-এ যাচাই করুন।

php
use Illuminate\Support\Facades\DB;

$rows = DB::table('books')
    ->where('is_public', true)
    ->whereRaw(
        "to_tsvector('simple', coalesce(title, '')) @@ plainto_tsquery('simple', ?)",
        [$query]
    )
    ->select('id', 'title')
    ->orderBy('id')
    ->limit(20)
    ->get();

return response()->json(['data' => $rows]);

সুবিধা, সীমাবদ্ধতা ও trade-off

Built-in database search small/medium requirement simple রাখতে পারে। Dedicated search engine typo tolerance, facets ও relevance tooling দিতে পারে, কিন্তু index sync ও operations যোগ হয়। Text expression index না থাকলে full-text operator-ও scan করতে পারে। Search ranking business criteria দিয়ে evaluate করুন; title exact match, recent content বা sponsored ranking একসঙ্গে গুলিয়ে না ফেলে explainable policy রাখুন।

সাধারণ ভুল

  • English stemming বাংলা grammar ঠিক করবে ভাবা।
  • Raw query string SQL-এ concatenate করা।
  • Private document শুধু UI-তে লুকিয়ে search endpoint-এ প্রকাশ করা।

আরও একটু গভীরে

Index content update/delete propagation test করুন। Query logs user-এর sensitive text ধারণ করতে পারে; retention/redaction policy রাখুন। Relevance evaluation-এ curated বাংলা/English query set ও expected good results ব্যবহার করুন। Snippet highlighting untrusted document HTML থেকে করলে XSS prevention দরকার। Language detection imperfect; mixed-script title-এর জন্য multiple analyzed fields বা explicit aliases practical হতে পারে।

মনে রাখুন

Full-text search term-based retrieval, universal language understanding নয়। Compatible analysis, indexed expression, permission scope ও measured relevance দরকার। Source freshness search contract-এ জানান।

নিজে চেষ্টা করুন

বিশটি বাংলা/English mixed title এবং দশটি real query দিয়ে evaluation set বানান। Exact term, spelling variation, empty query ও private book case রাখুন। Index ছাড়া ও index-সহ EXPLAIN compare করার plan লিখুন।

নিজের বোঝা যাচাই করুন

1. Inverted index কী?

Term থেকে matching document references রাখে। ফলে প্রতিবার সব text scan না করে candidate খোঁজা যায়, configured analysis অনুযায়ী।

2. simple বাংলা stemming?

না। এটি minimal linguistic configuration; বাংলা morphology বা typo correction automatically মেটায় না। Real corpus-এ relevance test দরকার।

3. Full-text query মানেই fast?

না। Suitable index ও matching expression দরকার। Dataset, selectivity ও ranking computation actual cost বদলায়।

4. Search result authoritative?

Derived index lag থাকতে পারে। Permission ও critical state source থেকে revalidate করার requirement বিচার করুন।

5. Query parameter binding কেন?

User text SQL syntax হিসেবে ঢোকা আটকায়। Input length/complexity limit ও access control তবু আলাদা দরকার।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।