Full-Text Search (FTS) হল একটি ডেটাবেস ফিচার যা ডেটাবেসের টেক্সট ডেটাতে উন্নত এবং শক্তিশালী অনুসন্ধান ক্ষমতা প্রদান করে। এটি সাধারণত স্বাভাবিক LIKE কুয়েরি বা সাধারণ স্ট্রিং ম্যাচিং এর চেয়ে অনেক বেশি কার্যকর, বিশেষ করে যখন ডেটাবেসে বৃহৎ পরিমাণ টেক্সট ডেটা থাকে এবং আপনাকে দ্রুত এবং সঠিকভাবে অনুসন্ধান করতে হয়।
Full-Text Search ব্যবহার করে আপনি একটি টেক্সটের মধ্যে শব্দের অবস্থান খুঁজে পেতে পারেন, একাধিক শব্দের উপর ভিত্তি করে অনুসন্ধান করতে পারেন, এবং ডেটাতে প্রাসঙ্গিকতার উপর ভিত্তি করে ফলাফলগুলির শ্রেণিবিন্যাস করতে পারেন।
Full-Text Search কীভাবে কাজ করে?
Full-Text Search-এ, টেক্সট ডেটা সাধারণত একটি বা একাধিক index ব্যবহার করে অনুসন্ধান করা হয়। এই ইনডেক্স সাধারণত শব্দ বা টোকেনের উপর ভিত্তি করে তৈরি হয়। pg_catalog-এ PostgreSQL এর জন্য একটি শক্তিশালী FTS সিস্টেম রয়েছে যা টেক্সট ডেটার প্রতিটি শব্দকে ভাঙে (স্টেমিং) এবং স্টপওয়ার্ডস (যেমন "the", "is", "at" ইত্যাদি) বাদ দিয়ে, শুধুমাত্র গুরুত্বপূর্ণ শব্দগুলিকে ফোকাস করে।
PostgreSQL এ FTS-এ সাধারণত তিনটি প্রধান অংশ থাকে:
- Tokenizer: টেক্সটকে শব্দে ভেঙে ফেলা।
- Dictionary: শব্দের স্টেমিং এবং স্টপওয়ার্ডস ফিল্টার করা।
- Index: শব্দগুলোর দ্রুত অনুসন্ধান সম্ভব করতে একটি ইনডেক্স তৈরি করা।
Full-Text Search এর প্রয়োগ
PostgreSQL-এ Full-Text Search বাস্তবায়ন করার জন্য কিছু ধাপ রয়েছে:
1. এনকোডিং এবং টোকেনাইজিং
Text search vectors তৈরি করার জন্য প্রথমে টেক্সট ডেটা "tokenize" করা হয়, অর্থাৎ, এটি শব্দে ভাঙা হয়। PostgreSQL-এর to_tsvector ফাংশন শব্দগুলোকে সঠিক ফর্মে রূপান্তর করতে ব্যবহৃত হয়।
উদাহরণ:
SELECT to_tsvector('english', 'The quick brown fox jumped over the lazy dog');
এটি একটি টেক্সট স্ট্রিংকে টোকেনাইজ করে, শব্দগুলোকে সাধারণ ফর্মে (স্টেমিং) রূপান্তরিত করে এবং একটি tsvector রিটার্ন করবে।
2. Search Query with Full-Text Search
to_tsquery ফাংশন ব্যবহার করে আপনি query তৈরি করতে পারেন, যা টেক্সটের মধ্যে নির্দিষ্ট শব্দ খুঁজে বের করতে সাহায্য করে। আপনি to_tsquery-এর সাথে @@ অপারেটর ব্যবহার করতে পারেন, যা টেক্সট অনুসন্ধান করে।
উদাহরণ:
SELECT *
FROM documents
WHERE to_tsvector(content) @@ to_tsquery('quick & fox');
এটি documents টেবিলের content কলামে "quick" এবং "fox" শব্দ অনুসন্ধান করবে।
3. Indexing for Full-Text Search
PostgreSQL-এর GIN (Generalized Inverted Index) বা GiST (Generalized Search Tree) ইনডেক্স ব্যবহার করে Full-Text Search এর পারফরম্যান্স আরও উন্নত করা যেতে পারে। GIN ইনডেক্স খুব দ্রুত অনুসন্ধান করতে সক্ষম।
GIN ইনডেক্স তৈরি করা:
CREATE INDEX idx_content_search
ON documents USING gin(to_tsvector('english', content));
এটি documents টেবিলের content কলামের জন্য একটি GIN ইনডেক্স তৈরি করবে, যা Full-Text Search এর পারফরম্যান্স উন্নত করবে।
4. Ranking (প্রাসঙ্গিকতার র্যাঙ্কিং)
PostgreSQL এর Full-Text Search আপনাকে relevance ranking বা প্রাসঙ্গিকতার উপর ভিত্তি করে ফলাফলগুলির শ্রেণীবিভাগ করতে দেয়। এটি সাধারণত ts_rank ফাংশন দ্বারা করা হয়।
প্রাসঙ্গিকতার র্যাঙ্কিং উদাহরণ:
SELECT title, ts_rank(to_tsvector(content), to_tsquery('quick & fox')) AS rank
FROM documents
WHERE to_tsvector(content) @@ to_tsquery('quick & fox')
ORDER BY rank DESC;
এটি documents টেবিলের content কলামে "quick" এবং "fox" শব্দগুলির জন্য প্রাসঙ্গিকতার উপর ভিত্তি করে ফলাফল শীর্ষে দেখাবে।
5. Preprocessing and Stopwords
PostgreSQL-এ stopwords ফিচার রয়েছে, যা সাধারণত ব্যবহৃত ছোট শব্দগুলো (যেমন "the", "and", "of") ফিল্টার করে। এই শব্দগুলো FTS-এ অন্তর্ভুক্ত করা হয় না, যাতে অনুসন্ধানটি আরও দ্রুত এবং সঠিক হয়।
আপনি PostgreSQL-এর custom stopwords list ব্যবহার করতে পারেন বা স্টপওয়ার্ডস বাদ দিয়ে নিজস্ব ডিকশনারি তৈরি করতে পারেন।
Full-Text Search এর অন্যান্য ফিচার
Phrase Search: আপনি একটি পূর্ণ বাক্যে (ফ্রেজ) অনুসন্ধান করতে পারেন।
উদাহরণ:
SELECT * FROM documents WHERE to_tsvector(content) @@ phraseto_tsquery('english', 'quick fox');Prefix Search: শব্দের পূর্ণতা না দিয়ে শুধুমাত্র প্রিফিক্স অনুসন্ধান করতে পারেন।
উদাহরণ:
SELECT * FROM documents WHERE to_tsvector(content) @@ to_tsquery('quick:*');- Web Search: এটি ওয়েব সার্চের মতো কার্যকরী অনুসন্ধান তৈরি করতে ব্যবহার করা হয়, যেখানে একটি ফিচারাইজড পদ্ধতি অনুসন্ধান হয়।
সারাংশ
Full-Text Search একটি শক্তিশালী ফিচার যা PostgreSQL-এ টেক্সট ডেটাতে দ্রুত এবং সঠিক অনুসন্ধান সক্ষম করে। এটি উন্নত অনুসন্ধান কৌশল ব্যবহার করে, যেমন tokenization, stemming, এবং stopword removal, এবং আপনি GIN indexes, relevance ranking, এবং phrase search ইত্যাদি ফিচার ব্যবহার করে এটি আরও কার্যকরী করতে পারেন।
Full-Text Search PostgreSQL-এ একটি গুরুত্বপূর্ণ টুল যা বৃহৎ টেক্সট ডেটাবেসে দ্রুত এবং প্রাসঙ্গিক ফলাফল দিতে সহায়তা করে, এবং এটি একাধিক ইন্ডাস্ট্রি যেমন ইকমার্স, ব্লগিং প্ল্যাটফর্ম, এবং ডকুমেন্ট ম্যানেজমেন্ট সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয়।
Read more