আমি গত কয়েকদিনে পোস্টগ্রাসে সম্পূর্ণ পাঠ্য অনুসন্ধানে এসেছি এবং একাধিক কলাম জুড়ে অনুসন্ধান করার সময় আমি সূচীকরণ সম্পর্কে কিছুটা বিভ্রান্ত হয়ে পড়েছি।
পোস্টগ্রিস ডকসts_vector
কনটেনটেটেড কলামগুলিতে একটি সূচক তৈরি করার বিষয়ে কথা বলে , যেমন:
CREATE INDEX pgweb_idx ON pgweb
USING gin(to_tsvector('english', title || ' ' || body));
যা আমি এর মতো অনুসন্ধান করতে পারি:
... WHERE
(to_tsvector('english', title||' '||body) @@ to_tsquery('english', 'foo'))
যাইহোক, আমি যদি কখনও কখনও কেবল শিরোনামটি অনুসন্ধান করতে চাইতাম, কখনও কখনও কেবল শরীর এবং কখনও কখনও উভয়ই আমার 3 টি পৃথক সূচী প্রয়োজন। এবং আমি যদি কোনও তৃতীয় কলামে যুক্ত করি তবে তা সম্ভবত 6 সূচক এবং আরও কিছু হতে পারে।
একটি বিকল্প যা আমি ডক্সে দেখিনি তা হ'ল দুটি কলামকে আলাদাভাবে সূচীকরণ করা এবং তারপরে কেবল একটি সাধারণ WHERE...OR
ক্যোয়ারী ব্যবহার করুন :
... WHERE
(to_tsvector('english', title) @@ to_tsquery('english','foo'))
OR
(to_tsvector('english', body) @@ to_tsquery('english','foo'))
দুই মিলিয়ন ডলার সারি বেঞ্চমার্কিংয়ের মূলত পারফরম্যান্সে কোনও পার্থক্য নেই বলে মনে হয়।
সুতরাং আমার প্রশ্নটি হ'ল:
আমি স্বতন্ত্রভাবে কলামগুলি কেবল ইনডেক্সিংয়ের চেয়ে কেন এ জাতীয় সূচিগুলি সংযুক্ত করতে চাই? উভয়ের সুবিধা / অসুবিধাগুলি কী?
আমার সর্বোত্তম অনুমান যে আমি যদি আগে থেকে জানতাম তবে আমি কেবল উভয় কলামই অনুসন্ধান করতে চাই (একবারে কখনই নয়) আমার কেবলমাত্র একটি সূচক প্রয়োজন যা কনটেন্টেট করে কম স্মৃতি ব্যবহার করে।
title
মধ্যেbody
এবং তারপর ইন্ডেক্স যে কত মূল্য দিতে হবে, যদিও আমি সংশোধন খোলা আছি। আমি সম্ভবত তাদের পৃথক পৃথকভাবে সূচিকর্ম সঙ্গে স্টিক হবে। এছাড়াও, যদি এটি কিছুটা দুশ্চিন্তা ছিল যে কোনওরকমভাবে আপনাকে একত্রিত করার দরকার পড়েছিল, তবে আমি অনুমান করি যে আপনি কেবল অনুসন্ধানটি অ্যাড-হক চালাতে পারেন।