Thuta Learning
ရှာဖွေရန်
AdvancedData & Databasesbeginner

Full-Text Search

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Full-Text Search concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ SQL/command ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် အသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

`ILIKE '%word%'` က simple substring search ဖြစ်ပြီး linguistic normalization၊ ranking နဲ့ scalable index အတွက်မလုံလောက်နိုင်ပါ။ PostgreSQL full-text search က document ကို lexemes ပါသော `tsvector` အဖြစ်ပြောင်းပြီး user query ကို `tsquery` အဖြစ်သတ်မှတ်ပါတယ်။ Language configuration က stemming/stop words ကိုသက်ရောက်ပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

English title/description အတွက် generated search vector column ထည့်ပြီး GIN index လုပ်မယ်။ Burmese word segmentation/stemming ကို built-in `english` config မဖြေရှင်းနိုင်တာကြောင့် locale အလိုက် simple config၊ trigram extension သို့ external search ကို test data ဖြင့်ရွေးရပါတယ်။

အတူတူ စမ်းရေးကြည့်မယ်

sql
ALTER TABLE app.tutorials
ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
  to_tsvector('english', coalesce(title, '') || ' ' || coalesce(metadata->>'summary', ''))
) STORED;

CREATE INDEX tutorials_search_gin_idx
  ON app.tutorials USING gin (search_vector);

SELECT title, ts_rank(search_vector, q) AS rank
FROM app.tutorials, websearch_to_tsquery('english', 'postgres performance') AS q
WHERE search_vector @@ q
ORDER BY rank DESC;
You should see
Rank ပါသော indexed full-text search result ရမည်။

၅ မိနစ် စမ်းကြည့်

Title ကို description ထက် weight ပိုပေးရန် `setweight` နဲ့ vector နှစ်ခု combine လုပ်ပါ။

သတိလေးတစ်ချက်

English config ကို Burmese content ပေါ်တန်းသုံးပြီး search quality ကောင်းမယ်ဟု မယူဆပါနှင့်။ Locale တစ်ခုစီကို evaluation set ဖြင့်စမ်းပါ။

PostgreSQL — Full Text SearchPostgreSQL Global Development Group

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • English config ကို Burmese content ပေါ်တန်းသုံးပြီး search quality ကောင်းမယ်ဟု မယူဆပါနှင့်။ Locale တစ်ခုစီကို evaluation set ဖြင့်စမ်းပါ။
  • နမူနာ code ကို production data ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test database နှင့် recoverable backup ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Title ကို description ထက် weight ပိုပေးရန် `setweight` နဲ့ vector နှစ်ခု combine လုပ်ပါ။

You'll know it worked when: Rank ပါသော indexed full-text search result ရမည်။

Full-Text Search | Thuta Learning