Firebase SQL Connect ফুল-টেক্সট সার্চ সমর্থন করে, যা পোস্টগ্রেসকিউএল দ্বারা চালিত। ফুল-টেক্সট সার্চ আপনাকে একই সাথে একাধিক কলাম জুড়ে কীওয়ার্ড এবং বাক্যাংশ অনুসন্ধান করার মাধ্যমে বৃহৎ ডেটাসেটের মধ্যে দ্রুত এবং দক্ষতার সাথে তথ্য খুঁজে বের করতে সাহায্য করে।
আপনি আপনার সার্ভিসে ফুল-টেক্সট সার্চ যোগ করতে পারেন। প্রথমে আপনার স্কিমার যে String আপনি সার্চ করতে চান, সেটিতে @searchable ডিরেক্টিভটি যোগ করুন। উদাহরণস্বরূপ:
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
এই নির্দেশিকাটি যোগ করার পরে, আপনি একটি কোয়েরিতে <pluralType>_search ফিল্ডটি যোগ করে পূর্ণ-পাঠ্য অনুসন্ধান করতে পারবেন। এই ক্ষেত্রে, এটি হবে movies_search :
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
পূর্ণ-পাঠ্য অনুসন্ধানের ফলাফল সূক্ষ্মভাবে সমন্বয় করা
আপনি @searchable ডিরেক্টিভ এবং _search ফিল্ডে আর্গুমেন্ট যোগ করে পূর্ণ-পাঠ্য অনুসন্ধানের ফলাফলকে আরও নিখুঁত করতে পারেন;
ভাগ করা যুক্তি
সাধারণ তালিকা ফিল্ড <pluralType> এর জন্য ব্যবহৃত অনেকগুলো আর্গুমেন্ট দিয়েই আপনি অনুসন্ধানের ফলাফল নিয়ন্ত্রণ করতে পারেন:
-
orderআপনাকে ফলাফলের ক্রম পরিবর্তন করার সুযোগ দেয়। এটি বাদ দিলে, ফলাফলগুলো প্রাসঙ্গিকতার ক্রম অনুসারে সাজানো হবে। -
whereআপনি অনুসন্ধানে অতিরিক্ত ফিল্টার যোগ করতে পারেন (যেমন, শুধুমাত্র একটি নির্দিষ্ট ঘরানার চলচ্চিত্র অনুসন্ধান করা)। -
limitকোয়েরিটিকে শুধুমাত্র শীর্ষ X সংখ্যক ফলাফল ফেরত দিতে বাধ্য করে। -
offsetকোয়েরিটিকে প্রথম X সংখ্যক ফলাফল এড়িয়ে যেতে সাহায্য করে। -
distinctতৈরি হওয়া SQL-এ DISTINCT অপারেটরটি যোগ করে।
ভাষা পছন্দ
ডিফল্টরূপে, পূর্ণ-পাঠ্য অনুসন্ধান ইংরেজি ভাষায় ডকুমেন্ট পার্স করে। আপনি @searchable ডিরেক্টিভের language আর্গুমেন্ট ব্যবহার করে এটি পরিবর্তন করতে পারেন:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
সঠিক ভাষা নির্দিষ্ট করলে PostgreSQL নির্ভুলভাবে লেক্সিকাল স্টেমিং করতে পারবে এবং আপনার অনুসন্ধানে কোনো প্রাসঙ্গিক ফলাফল বাদ পড়বে না, তা নিশ্চিত করতে সাহায্য করবে। আপনি যদি একাধিক কলামে অনুসন্ধান করেন, তবে সেগুলোর সবগুলোর ভাষা একই হতে হবে।
| ভাষা | ||
|---|---|---|
|
|
|
psql ব্যবহার করে নিচের কোয়েরিটির মাধ্যমে আপনি সম্পূর্ণ তালিকাটি পেতে পারেন।
SELECT cfgname FROM pg_ts_config;
কোয়েরি ফরম্যাট
ডিফল্টরূপে, ফুল-টেক্সট সার্চ কোয়েরির জন্য ওয়েব সিম্যান্টিকস ব্যবহার করে (গুগল সার্চের মতো)। আপনি <pluralType>_search ফিল্ডে queryFormat আর্গুমেন্ট ব্যবহার করে এই আচরণটি পরিবর্তন করতে পারেন।
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
কোয়েরি ফরম্যাটের জন্য চারটি বিকল্প রয়েছে:
- QUERY ওয়েব সার্চ ইঞ্জিনগুলোকে পরিচিত অর্থ প্রদান করে (যেমন উদ্ধৃত স্ট্রিং, AND এবং OR)। এটিই ডিফল্ট।
- PLAIN সব শব্দকে মেলায়, কিন্তু অগত্যা একসাথে নয় ("brown dog" এর সাথে "the brown and white dog" বা "the white and brown dog" মিলবে)।
- বাক্যাংশটি একটি হুবহু বাক্যাংশের সাথে মেলে ("brown dog" বাক্যাংশটি "the white and brown dog" বাক্যাংশের সাথে মিলবে, কিন্তু "brown and white dog" বাক্যাংশের সাথে মিলবে না)।
- ADVANCED আপনাকে tsquery অপারেটরগুলির সম্পূর্ণ সেট ব্যবহার করে জটিল কোয়েরি তৈরি করার সুযোগ দেয়।
প্রাসঙ্গিকতার সীমা
প্রাসঙ্গিকতার একটি সীমা নির্ধারণ করার অর্থ হলো, আপনার অনুসন্ধানে শুধুমাত্র একটি নির্দিষ্ট প্রাসঙ্গিকতা মানের উপরের ফলাফলগুলোই দেখানো হবে। অনেক ক্ষেত্রে, আপনার এটি নির্ধারণ করার প্রয়োজন হবে না — ০-এর চেয়ে বেশি প্রাসঙ্গিকতা সম্পন্ন যেকোনো ফলাফলই একটি প্রাসঙ্গিক ফলাফল হিসেবে গণ্য হবে।
তবে, যদি আপনার অনুসন্ধানে অপ্রাসঙ্গিক ফলাফল আসে, তাহলে প্রাসঙ্গিকতার সীমা (relevance threshold) আপনার জন্য সেগুলোকে ছেঁকে বাদ দিয়ে দিতে পারে।
প্রাসঙ্গিকতা থ্রেশহোল্ডের জন্য একটি উপযুক্ত মান নির্ধারণ করতে, আপনার কয়েকটি পরীক্ষামূলক অনুসন্ধান চালানো এবং _metadata.relevance দেখা উচিত।
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
এমন একটি সীমা বেছে নিন যা আপনার মতে অপ্রাসঙ্গিক ফলাফলগুলোকে বাদ দেয়। তা করতে:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
পূর্ণ-পাঠ্য অনুসন্ধান, ভেক্টর সাদৃশ্য অনুসন্ধান এবং স্ট্রিং প্যাটার্ন ফিল্টারের মধ্যে নির্বাচন করা
SQL Connect আপনার ডাটাবেসে অনুসন্ধান করার জন্য কয়েকটি ভিন্ন উপায় প্রদান করে।
আপনার ব্যবহারের জন্য সঠিকটি বেছে নিতে এই সারণিটি ব্যবহার করুন।
| সম্পূর্ণ পাঠ্য অনুসন্ধান | ভেক্টর সাদৃশ্য অনুসন্ধান | স্ট্রিং প্যাটার্ন ফিল্টার |
|---|---|---|
| সাধারণ অনুসন্ধান কার্যকারিতা বাস্তবায়নের জন্য ভালো। | অর্থগতভাবে সাদৃশ্যপূর্ণ সারি খুঁজে বের করার জন্য ভালো (উদাহরণস্বরূপ, সুপারিশ বা 'এরকম আরও')। | সঠিক টেক্সট মেলানোর জন্য বা রেগুলার এক্সপ্রেশন দিয়ে অনুসন্ধানের জন্য ভালো। |
| এটি শাব্দিক স্টেমিং সম্পাদন করে, যা একই শব্দের বিভিন্ন রূপ বা কাল মেলাতে সাহায্য করে। | ভার্টেক্স এআই প্রয়োজন | এটি সবচেয়ে কম মেমরি এবং ডিস্ক স্পেস ব্যবহার করে, কারণ এর জন্য কোনো ইনডেক্স বা জেনারেটেড কলামের প্রয়োজন হয় না। |
| একটি টেবিলের একাধিক কলামের উপর এটি করা যেতে পারে। | একবারে শুধুমাত্র একটি কলামের জন্য কাজ করে। | OR ফিল্টার ব্যবহার করে একটি টেবিলের একাধিক কলামে এটি করা যেতে পারে। |
| বৃহত্তর ডকুমেন্টের ক্ষেত্রে কার্যকর | বড় ডকুমেন্টের ক্ষেত্রে কার্যকর | বড় আকারের ডকুমেন্ট অনুসন্ধান করার সময় কর্মক্ষমতা কমে যায়। |
| প্রতিটি অনুসন্ধানের জন্য একটি তৈরি করা কলাম এবং ইনডেক্স সংরক্ষণ করতে অতিরিক্ত মেমরি ও স্টোরেজ খরচ হয়। |