পাঠ্যক্রম খুলুন
অগ্রসর পর্যায়

Search Service: indexing, ranking ও freshness

Search Service

এই পাঠের কুইজ ↓৬ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

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

  • Source data ও searchable projection আলাদা করা
  • Inverted index এবং Trie-এর ভূমিকা বোঝা
  • বাংলা/Banglish normalization ও freshness design

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

দোকানে জামা খুঁজলে user Bangla, জামার roman spelling এবং mixed text লিখছেন। SQL wildcard search ধীর, typo-তে ফল নেই। Requirements: product search, filter, ranking ও autocomplete। প্রথমে bounded catalog এবং Bengali/English text support নিন; general web search আলাদা সমস্যা। Price বা availability stale হলে checkout authoritativeভাবে আবার যাচাই করবে। Private বা deleted product search-এ বের হওয়া কেবল freshness নয়, access breach হতে পারে।

সহজ করে বুঝি

Inverted index token থেকে matching document খুঁজে। Trie prefix ধরে candidate suggestion দেয়; full-text relevance ranking-এর পূর্ণ বিকল্প নয়। বাংলা Unicode normalization, combining marks, punctuation এবং token boundaries carefully handle করুন। Banglish transliteration ambiguous: জামা-এর jama variant mapping curated dictionary ও usage feedback চাইতে পারে। Original display text রাখুন; normalized search key দিয়ে পুরো original overwrite করবেন না।

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

বইয়ের শেষে শব্দ থেকে page খুঁজে পাওয়া inverted index। Alphabetical directory-তে প্রথম অক্ষর ধরে এগোনো Trie-এর মতো। বাংলা নামের বিকল্প বানান পাশাপাশি reference দিলে reader সাহায্য পান, কিন্তু সব শব্দ আন্দাজে এক বানানে মিশিয়ে দিলে অর্থ নষ্ট হয়।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Search হলো source-এর derived projection; Unicode-aware normalization, relevance এবং safe freshness একই সঙ্গে design করতে হয়।
Diagram-এর text flow দেখুন
flowchart LR
 D[(Product source)] --> O[Outbox or CDC]
 O --> N[Normalize and tokenize]
 N --> I[Inverted search index]
 N --> T[Prefix Trie suggestions]
 U[User query] --> Q[Query normalization]
 Q --> I
 Q --> T
 I --> F[Filter rank and permission]
 T --> F

Source change reliable pipeline-এ index-এ যায়। Index worker version দেখে stale update reject করতে পারে। Query একই compatible normalization পেরোয়। Search relevance ও autocomplete আলাদা candidate path ব্যবহার করে। Final response current visibility policy মেনে চলে। Deleted item tombstone ও reindex workflow-এ ফিরে না আসে নিশ্চিত করুন। Index unavailable হলে bounded degraded search বা clear error দিতে পারেন।

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

Assumption: ১০ লাখ product, average searchable text ২KB হলে raw text প্রায় ২GB; index size analyzer, replicas ও term distribution-এ বদলায়। GET /search?q=&filters= এবং /suggest?q=। Source products table, index document version, suggestion term/frequency ভাবুন। নিচের Laravel PostgreSQL query simple analyzer-এর basic token-search example; Bangla linguistic search solved দাবি নয়। q bound parameter এবং scope filter verified।

php
use Illuminate\Support\Facades\DB;
$rows = DB::table('products')
    ->where('is_public', true)
    ->whereRaw(
        "to_tsvector('simple', name) @@ plainto_tsquery('simple', ?)",
        [$request->validated('q')],
    )
    ->limit(20)->get();

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

Dedicated index rich ranking ও fast search দেয়, eventual consistency এবং operational cost যোগ করে। PostgreSQL full-text small/medium scoped use-এ সহজ হতে পারে; language support ও index strategy যাচাই করুন। Aggressive normalization recall বাড়িয়ে precision কমাতে পারে। Suggestion popularity ব্যক্তিগত বা sensitive query leak করতে পারে; privacy filtering ও minimum frequency policy দরকার।

সাধারণ ভুল

  • Trie থাকলেই relevance search সম্পূর্ণ বলা।
  • Banglish transliteration সব শব্দে unambiguous ধরা।
  • Deleted/private source-এর stale search document প্রকাশ করা।

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

Index rebuild versioned target-এ করে alias/pointer switch করলে live query কম ব্যাহত হয়। Out-of-order events source version দিয়ে সামলান। Search quality শুধু latency নয়: labeled query set-এ relevance, zero-result rate এবং useful suggestion evaluate করুন। Unicode stripping দিয়ে Bengali letters বা meaningful marks না মুছুন। Filter cache tenant-aware রাখুন; query log retention ও personal data policy স্পষ্ট করুন।

মনে রাখুন

Search হলো source-এর derived projection; Unicode-aware normalization, relevance এবং safe freshness একই সঙ্গে design করতে হয়।

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

বাংলা, Banglish, typo এবং mixed-script দশটি query-এর expected result লিখুন। Index worker পিছিয়ে থাকলে product deletion response পরীক্ষা করুন। Rebuild চলাকালে query continuity ও rollback পরিকল্পনা দিন।

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

1. Inverted index কী?

Token থেকে matching document-এর posting খুঁজে। Plain row scan-এর তুলনায় text retrieval pattern বদলায়।

2. Trie কী কাজে?

Prefix-based autocomplete candidate retrieval-এ। Ranking, typo handling ও permission নিজে সব সমাধান করে না।

3. Banglish exact mapping?

অনেক spelling ambiguous। Dictionary, context ও evaluation দরকার; original text অক্ষত রাখুন।

4. Index source of truth?

সাধারণত derived projection। Rebuildable pipeline এবং versioned updates দরকার।

5. Simple analyzer কি Bangla stemming?

না। Example basic token handling দেখায়; language-specific quality আলাদা evaluate করতে হবে।

আরও পড়ুন

এই পাঠের কুইজ

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

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

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

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

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