Firebase Data Connect পূর্ণ-পাঠ্য অনুসন্ধান সমর্থন করে, যা PostgreSQL দ্বারা চালিত। পূর্ণ-পাঠ্য অনুসন্ধান আপনাকে একসাথে একাধিক কলামে কীওয়ার্ড এবং বাক্যাংশ অনুসন্ধান করে বৃহৎ ডেটাসেটের মধ্যে দ্রুত এবং দক্ষতার সাথে তথ্য সনাক্ত করতে দেয়।
আপনি আপনার পরিষেবাতে পূর্ণ-পাঠ্য অনুসন্ধান যোগ করতে পারেন। প্রথমে আপনার স্কিমার যে 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 নির্দেশিকাতে ভাষা যুক্তি দিয়ে এটি পরিবর্তন করতে পারেন:
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 সব শব্দের সাথে মিলে যায়, কিন্তু একসাথে নয় ("বাদামী কুকুর" "বাদামী এবং সাদা কুকুর" বা "সাদা এবং বাদামী কুকুর" এর সাথে মিলবে)।
- PHRASE একটি হুবহু বাক্যাংশের সাথে মিলে যায় ("বাদামী কুকুর" "সাদা এবং বাদামী কুকুর" এর সাথে মিলবে, কিন্তু "বাদামী এবং সাদা কুকুর" এর সাথে মিলবে না)।
- ADVANCED আপনাকে tsquery অপারেটরের সম্পূর্ণ সেট ব্যবহার করে জটিল প্রশ্ন তৈরি করতে দেয়।
প্রাসঙ্গিকতার সীমা
প্রাসঙ্গিকতার সীমা নির্ধারণের অর্থ হল আপনার অনুসন্ধান কেবলমাত্র একটি নির্দিষ্ট প্রাসঙ্গিকতার মানের উপরে ফলাফল দেবে। অনেক ক্ষেত্রে, আপনাকে এটি সেট করার প্রয়োজন হবে না - ০-এর বেশি প্রাসঙ্গিকতাযুক্ত যেকোনো ফলাফলই প্রাসঙ্গিক ফলাফল হবে।
তবে, যদি আপনি দেখেন যে আপনার অনুসন্ধানে এমন ফলাফল আসছে যা প্রাসঙ্গিক বলে মনে হচ্ছে না, তাহলে প্রাসঙ্গিকতার থ্রেশহোল্ড আপনার জন্য সেগুলি ফিল্টার করতে পারে।
প্রাসঙ্গিকতার থ্রেশহোল্ডের জন্য একটি উপযুক্ত মান বের করতে, আপনার কয়েকটি পরীক্ষামূলক অনুসন্ধান করা উচিত এবং _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
...
}
}
পূর্ণ-পাঠ্য অনুসন্ধান, ভেক্টর সাদৃশ্য অনুসন্ধান এবং স্ট্রিং প্যাটার্ন ফিল্টারগুলির মধ্যে নির্বাচন করা
Data Connect আপনার ডাটাবেস অনুসন্ধানের জন্য কয়েকটি ভিন্ন উপায় অফার করে।
আপনার ব্যবহারের ক্ষেত্রে সঠিকটি বেছে নিতে এই টেবিলটি ব্যবহার করুন।
| পূর্ণ-পাঠ্য অনুসন্ধান | ভেক্টর সাদৃশ্য অনুসন্ধান | স্ট্রিং প্যাটার্ন ফিল্টার |
|---|---|---|
| সাধারণ অনুসন্ধান কার্যকারিতা বাস্তবায়নের জন্য ভালো | শব্দার্থগতভাবে অনুরূপ সারি খুঁজে বের করার জন্য ভালো (উদাহরণস্বরূপ, সুপারিশ বা 'এরকম আরও') | সঠিক টেক্সট মিল বা নিয়মিত এক্সপ্রেশন অনুসন্ধানের জন্য ভালো |
| লেক্সিকাল স্টেমিং সম্পাদন করে, যা একই শব্দের বিভিন্ন রূপ বা কাল মেলাতে সাহায্য করে। | ভার্টেক্স এআই প্রয়োজন | সবচেয়ে কম মেমোরি এবং ডিস্ক স্পেস ব্যবহার করে, কারণ এতে কোনও ইনডেক্স বা জেনারেটেড কলামের প্রয়োজন হয় না। |
| একটি টেবিলের একাধিক কলামে সম্পাদনা করা যেতে পারে | একবারে শুধুমাত্র একটি কলামের জন্য কাজ করে | OR ফিল্টার ব্যবহার করে একটি টেবিলের একাধিক কলামে সম্পাদনা করা যেতে পারে |
| বৃহত্তর নথির উপর পারফর্ম্যান্ট | বড় নথির উপর পারফর্ম্যান্ট | বড় নথি অনুসন্ধান করার সময় কম কর্মক্ষমতা |
| প্রতিটি অনুসন্ধানের জন্য একটি জেনারেট করা কলাম এবং একটি সূচক সংরক্ষণ করতে মেমরি এবং স্টোরেজ ওভারহেড যোগ করে। |