Search Service: indexing, ranking ও freshness
Search Service
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- 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 লোড হচ্ছে…
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।
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 করতে হবে।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।