Full-Text Search এর উন্নত ব্যবহার

Full-Text Search in PostgreSQL - পোস্টগ্রিএসকিউএল (PostgreSQL) - Database Tutorials

256

Full-Text Search (FTS) PostgreSQL-এ একটি শক্তিশালী বৈশিষ্ট্য যা টেক্সট ডেটার মধ্যে দ্রুত এবং সঠিক অনুসন্ধান করতে সহায়তা করে। এটি বিশেষ করে টেক্সট ডেটাবেসে যেমন ওয়েবপেজ কনটেন্ট, ইমেল, নথি, ব্লগ পোস্ট এবং অন্যান্য বড় টেক্সট ডেটা সার্চ করার জন্য ব্যবহৃত হয়। PostgreSQL-এ Full-Text Search ব্যবহার করলে টেক্সটের মধ্যে শব্দ, অর্থ, বা ফ্রেজের উপর ভিত্তি করে দ্রুত অনুসন্ধান করা যায়।

এখানে PostgreSQL-এ Full-Text Search এর কিছু উন্নত ব্যবহার এবং কৌশল আলোচনা করা হলো।


1. Basic Full-Text Search Setup

PostgreSQL-এ Full-Text Search প্রক্রিয়া শুরু করতে প্রথমে tsvector এবং tsquery ডেটা টাইপগুলো ব্যবহার করা হয়। tsvector ডেটা টাইপটি একটি পূর্ণাঙ্গ টেক্সট ডকুমেন্টের মধ্যে প্রক্রিয়া করা শব্দসমূহের একটি "অংশবিশেষ" (lexeme) রূপে ধারণ করে। tsquery কুয়েরির জন্য ব্যবহার করা হয়।

ডেটাবেসে Full-Text Search সেটআপ:

ধরা যাক, আমাদের একটি articles টেবিল রয়েছে, যার মধ্যে title এবং content নামে দুটি টেক্সট কলাম রয়েছে:

CREATE TABLE articles (
    id SERIAL PRIMARY KEY,
    title TEXT,
    content TEXT
);

এখন, আমরা এই টেবিলের উপর Full-Text Search সক্ষম করতে পারি:

-- Create a tsvector column to store tokenized text
ALTER TABLE articles ADD COLUMN tsv_content tsvector;

-- Update the tsv_content column with tokenized text
UPDATE articles SET tsv_content = to_tsvector('english', content);

-- Create an index on the tsvector column for fast searching
CREATE INDEX idx_tsv_content ON articles USING gin(tsv_content);

এই স্টেপগুলো articles টেবিলের content কলামের উপর একটি Full-Text Index তৈরি করবে।

Basic Full-Text Search Query:

এখন আমরা একটি সাধারণ কুয়েরি চালাতে পারি, যেখানে টেক্সটের মধ্যে নির্দিষ্ট শব্দ খোঁজা হবে:

SELECT * FROM articles
WHERE tsv_content @@ to_tsquery('english', 'search');

এটি content কলামের মধ্যে "search" শব্দটি পাওয়া যায় এমন সব রেকর্ড রিটার্ন করবে।


2. Advanced Full-Text Search Techniques

a. Search with Multiple Words

Full-Text Search একাধিক শব্দের জন্যও কার্যকরী হতে পারে। আপনি চাইলে একটি বা একাধিক শব্দের জন্য সিলেক্টিভ কুয়েরি চালাতে পারেন।

SELECT * FROM articles
WHERE tsv_content @@ to_tsquery('english', 'search & example');

এখানে, & চিহ্নটি শব্দের মধ্যে AND সম্পর্ক নির্দেশ করে। অর্থাৎ, এখানে "search" এবং "example" উভয় শব্দ একসাথে থাকতে হবে।

b. Prefix Search

কখনও কখনও আপনি এমন শব্দ খুঁজতে চাইতে পারেন যা কোনো নির্দিষ্ট প্রিফিক্স দিয়ে শুরু হয়। PostgreSQL-এ prefix search করার জন্য pg_trgm এক্সটেনশন ব্যবহার করা যেতে পারে।

CREATE EXTENSION pg_trgm;
CREATE INDEX idx_trgm_content ON articles USING gin (content gin_trgm_ops);

এটি প্রিফিক্স অনুসন্ধানকে দ্রুততর করতে সাহায্য করবে।

c. Ranking and Sorting Search Results

PostgreSQL-এ আপনি ranking সিস্টেম ব্যবহার করে সার্চ ফলাফলগুলি র‌্যাঙ্ক করতে পারেন। এতে আপনাকে সরাসরি কোন ফলাফল কতটা প্রাসঙ্গিক তা নির্ধারণ করার সুযোগ দেয়। PostgreSQL ts_rank এবং ts_rank_cd ফাংশন ব্যবহার করে র‌্যাঙ্কিং সম্পাদন করে।

SELECT id, title, ts_rank(tsv_content, to_tsquery('english', 'search & example')) AS rank
FROM articles
WHERE tsv_content @@ to_tsquery('english', 'search & example')
ORDER BY rank DESC;

এটি কুয়েরি রেজাল্টের জন্য একটি র‌্যাঙ্ক মূল্য প্রদান করবে এবং সার্চের প্রাসঙ্গিকতা অনুযায়ী রেজাল্ট সাজাবে।

d. Use of Weights for Search Terms

Weights ব্যবহার করে আপনি কিছু শব্দকে বেশি প্রাসঙ্গিক (more relevant) এবং অন্য কিছু শব্দকে কম প্রাসঙ্গিক (less relevant) করতে পারেন। PostgreSQL-এ tsvector কলামকে weights দিয়ে কনফিগার করা যায়, যাতে বিভিন্ন শব্দের গুরুত্ব আলাদা করা যায়।

UPDATE articles SET tsv_content = to_tsvector('english', title || ' ' || content);

-- Create weighted tsvector
UPDATE articles SET tsv_content = to_tsvector('english', 
    setweight(to_tsvector('english', title), 'A') || 
    setweight(to_tsvector('english', content), 'B'));

-- Rank based on weights
SELECT id, title, ts_rank(tsv_content, to_tsquery('english', 'search & example')) AS rank
FROM articles
WHERE tsv_content @@ to_tsquery('english', 'search & example')
ORDER BY rank DESC;

এখানে A এবং B ওজন ব্যবহার করা হয়েছে, যেখানে A হল সবচেয়ে গুরুত্বপূর্ণ শব্দ (title), এবং B তুলনামূলকভাবে কম গুরুত্বপূর্ণ (content)।


3. Full-Text Search with Synonyms and Stemming

a. Synonyms (সমার্থক শব্দ)

PostgreSQL-এ synonym dictionaries ব্যবহার করে আপনি একাধিক সমার্থক শব্দ বা থিসরাস যুক্ত করতে পারেন, যা একটি শব্দের জন্য কয়েকটি বিকল্প অনুসন্ধান করতে সহায়তা করে।

Example: আপনি চাইলে synonym file যোগ করতে পারেন এবং একটি কাস্টম text search configuration তৈরি করতে পারেন, যাতে সমার্থক শব্দগুলো স্বয়ংক্রিয়ভাবে একসাথে সন্ধান হয়।

b. Stemming (স্টেমিং)

Stemming হল একটি টেকনিক যা শব্দের মূল রুট বা স্তম্ভে ফিরে আসে (যেমন "running" → "run" বা "happily" → "happy")। PostgreSQL-এ to_tsvector ফাংশন স্বয়ংক্রিয়ভাবে স্টেমিং সম্পাদন করে।

Example:

SELECT * FROM articles
WHERE tsv_content @@ to_tsquery('english', 'run');

এটি "running", "runs", "runner" ইত্যাদি সব শব্দের জন্য সঠিক রেজাল্ট রিটার্ন করবে।


4. Using Full-Text Search in Real-World Applications

  • Search Engines: PostgreSQL-এর Full-Text Search ব্যবহার করে একটি সার্চ ইঞ্জিন তৈরি করা যেতে পারে, যেখানে টেক্সট ডেটার মধ্যে দ্রুত অনুসন্ধান করা হয়।
  • Content Management Systems (CMS): CMS-এর জন্য টেক্সট অনুসন্ধান করতে এটি খুবই উপকারী।
  • E-commerce Websites: প্রোডাক্টের বর্ণনা এবং ফিচারের মধ্যে দ্রুত অনুসন্ধান চালাতে সাহায্য করে।
  • Document Search: PDF বা অন্যান্য ডকুমেন্টের ভিতরের টেক্সট অনুসন্ধান করার জন্য।

সারাংশ

PostgreSQL-এ Full-Text Search খুবই শক্তিশালী এবং এটি টেক্সট ডেটাবেসে দ্রুত এবং দক্ষতার সাথে অনুসন্ধান পরিচালনা করতে সহায়তা করে। এর মাধ্যমে আপনি ranking, weighting, prefix search, stemming, synonyms ইত্যাদি কৌশল ব্যবহার করে টেক্সট ডেটার মধ্যে আরও উন্নত এবং সঠিক অনুসন্ধান করতে পারেন।

এটি বিভিন্ন প্রয়োজনে ব্যবহার করা যেতে পারে, যেমন ওয়েব সার্চ ইঞ্জিন, কন্টেন্ট ম্যানেজমেন্ট সিস্টেম, ই-কমার্স ওয়েবসাইট এবং ডকুমেন্ট সার্চের জন্য।

Content added By
Promotion

Are you sure to start over?

Loading...