কোনো কালেকশনের মধ্যে নির্দিষ্ট স্ট্রিং অনুসন্ধান করতে Cloud Firestore টেক্সট সার্চ ফিচার ব্যবহার করুন।
শুরু করার আগে
টেক্সট কোয়েরি ব্যবহার শুরু করার আগে, নিম্নলিখিত কাজগুলো করুন:
নিশ্চিত করুন যে আপনার একটি বিদ্যমান MongoDB সামঞ্জস্যপূর্ণ অপারেশনস ডেটাবেসে অ্যাক্সেস আছে, অথবা একটি ডেটাবেস তৈরি করে সেটিতে সংযোগ স্থাপন করুন ।
আপনার একটি টেক্সট ইনডেক্স আছে কিনা তা নিশ্চিত করুন, অথবা একটি টেক্সট ইনডেক্স তৈরি করুন ।
IAM অনুমতি
Cloud Firestore একটি ইনডেক্স তৈরি করতে, নিশ্চিত করুন যে আপনাকে নিম্নলিখিত ভূমিকাগুলির মধ্যে যেকোনো একটি বরাদ্দ করা হয়েছে:
-
roles/datastore.owner -
roles/datastore.indexAdmin -
roles/editor -
roles/owner
একটি রোল মঞ্জুর করতে, "একটি একক রোল মঞ্জুর করুন" দেখুন। Cloud Firestore রোল এবং সংশ্লিষ্ট অনুমতি সম্পর্কে আরও তথ্যের জন্য, "পূর্বনির্ধারিত রোল" দেখুন।
আপনি যদি কাস্টম রোল নির্ধারণ করে থাকেন, তাহলে ইনডেক্স তৈরি করার জন্য নিম্নলিখিত সমস্ত অনুমতি বরাদ্দ করুন:
-
datastore.indexes.create -
datastore.indexes.delete -
datastore.indexes.get -
datastore.indexes.list -
datastore.indexes.update
একটি টেক্সট কোয়েরি চালান
টেক্সট কোয়েরির জন্য ফিল্টারের ভিতরে $text অপারেটর ব্যবহার করুন। $search আর্গুমেন্টে কোয়েরি করা স্ট্রিংটি উল্লেখ করুন।
একটি সাধারণ টেক্সট কোয়েরি চালান
একটি সাধারণ কোয়েরি সম্পাদন করতে নিম্নলিখিত কোয়েরিটি চালান:
# Find query
db.cities.find({ $text: { $search: "french bread" } })
# Aggregation query
db.cities.aggregate([
{ $match: { $text: { $search: "french bread" } } }
]);
আপনার ইনডেক্স যদি পার্টিশন করা থাকে, তাহলে আপনি আপনার কোয়েরির মধ্যে একটি 'and' ইকুয়ালিটি ফিল্টারে পার্টিশনটি অন্তর্ভুক্ত করে সেই অনুযায়ী ফিল্টার করতে পারেন। উদাহরণস্বরূপ, আপনার যদি একটি city পার্টিশন থাকে, তাহলে আপনি একটি টেক্সট কোয়েরি নিম্নরূপভাবে ফিল্টার করতে পারেন:
db.myCollection.find( { $and: [
{ $text: { $search: "french bread" } },
{ "city": "Paris" }
] } )
আপনি পার্টিশনের উপর ভিত্তি করেও একটি অ্যাগ্রিগেশন ফিল্টার করতে পারেন। উদাহরণস্বরূপ:
db.myCollection.aggregate([
{ $match: { $text: { $search: "french bread" } } },
{ "city": "Paris" }
] );
আপনার পার্টিশনের মান অবশ্যই একটি স্ট্রিং হতে হবে। আপনার পার্টিশন ফিল্টারটিকে অবশ্যই 'and' ব্যবহার করে আপনার কোয়েরির সাথে যুক্ত করতে হবে।
কোয়েরি ভাষা সেট করুন
আপনি $language আর্গুমেন্ট ব্যবহার করে কোয়েরি ল্যাঙ্গুয়েজ সেট করতে পারেন। উদাহরণস্বরূপ:
db.cities.find({ $text: { $search: "french bread", $language: "en"} })
আপনি যদি কোয়েরি ল্যাঙ্গুয়েজ সেট না করেন, তাহলে কোয়েরিটি টেক্সট ইনডেক্সের ভাষা ব্যবহার করে।
একটি নির্দিষ্ট শব্দ অনুসন্ধান করুন
কোনো নির্দিষ্ট শব্দ অনুসন্ধান করতে, শব্দটিকে ডাবল কোটের মধ্যে রেখে একাধিক শব্দের একটি অনুক্রম হিসাবে কনফিগার করুন। উদাহরণস্বরূপ:
# Find query
db.cities.find({ $text: { $search: "\"best french bread\"" } })
# Aggregation query
db.cities.aggregate([
{ $match: { $text: { $search: "\"best french bread\"" } } },
]);
একটি পদ সংমিশ্রণ অনুসন্ধান করুন
আপনার কোয়েরি আরও সুনির্দিষ্ট করতে, একাধিক পদের একটি শৃঙ্খল উল্লেখ করুন। উদাহরণস্বরূপ, নিম্নলিখিত কোয়েরিটি best AND french AND ("bread" OR "is") এই সংমিশ্রণের সাথে মেলে এমন ডকুমেন্টগুলো ফেরত দেয়:
# Find query
db.cities.find({ $text: { $search: "\"best\" \"french\" bread is" } })
# Aggregation query
db.cities.aggregate([
{ $match: { $text: { $search: "\"best\" \"french\" bread is" } } },
]);
একটি পদ বাদ দিন
কোয়েরি থেকে কোনো পদ বাদ দিতে, পদটির আগে হাইফেন (-) বসান:
# Find query
db.cities.find({ $text: { $search: "best bread -french"} })
# Aggregation query
db.cities.aggregate([
{ $match: { $text: { $search: "best bread -french" } } },
]);
প্রাসঙ্গিকতা স্কোর গণনা করুন
টেক্সট কোয়েরি দ্বারা মেলানো ডকুমেন্টগুলোর প্রাসঙ্গিকতা স্কোর গণনা করতে {$meta: "textScore"} এক্সপ্রেশনটি ব্যবহার করুন। ফলাফলগুলোকে স্কোরের অবরোহী ক্রমে সাজাতে, একটি সর্ট এক্সপ্রেশনে $meta ব্যবহার করুন। নিম্নলিখিত উদাহরণগুলো বিবেচনা করুন, যেখানে SCORE_FIELD হলো স্কোরের মান সংরক্ষণ করতে ব্যবহৃত ফিল্ডের নাম:
# Find query
db.cities
.find({ $text: { $search: "best french bread" } })
.sort({ SCORE_FIELD: { $meta: "textScore" } })
# Aggregation query
db.cities.aggregate([
{ $match: { $text: { $search: "best french bread" } } },
{ $sort: { "SCORE_FIELD": { $meta: "textScore"} } },
]);
আপনি প্রজেকশন এক্সপ্রেশনেও টেক্সট স্কোর ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
# Find query
db.cities
.find({ $text: { $search: "best french bread" } })
.project({ score: { $meta: "textScore" } })
# Aggregation query
db.cities.aggregate([
{ $match: { $text: { $search: "best french bread" } } },
{ $project: { "scoreField": { $meta: "textScore"} } },
]);
কোয়েরি প্রসারিত করুন
কোয়েরির ফলাফলের প্রাসঙ্গিকতা বাড়ানোর জন্য, $text অপারেটরটি নির্দিষ্ট ভাষা অনুযায়ী সার্চ স্ট্রিং-কে পরিবর্ধন করে, যাতে প্রসঙ্গ-সচেতন সমার্থক শব্দ, মূল রূপ, বানান-সংশোধিত শব্দ, ডায়াক্রিটিক বৈচিত্র্য এবং আরও অনেক কিছুর মিল অন্তর্ভুক্ত হয়।
সীমাবদ্ধতা
- একই কোয়েরিতে
$nearঅপারেটর এবং$textঅপারেটর ব্যবহার করা যায় না। - প্রতিটি
findবাaggregationকোয়েরিতে একটিমাত্র$textঅপারেটর ব্যবহার করা যায়। - অ্যাগ্রিগেশনের ক্ষেত্রে,
$text$matchস্টেজটি অবশ্যই প্রথম পাইপলাইন স্টেজ হতে হবে। -
$textশুধুমাত্র$andএবং$orভিতরেই থাকতে পারে। - যদি
$text,$orভিতরে থাকে, তাহলে নন-সার্চ ডিসজাঙ্কটগুলো কোয়েরি অপটিমাইজ করার জন্য বিদ্যমান অর্ডারড ইনডেক্স ব্যবহার করতে পারে। যদি অন্য ডিসজাঙ্কটগুলো ইনডেক্স করা না থাকে, তাহলে কোয়েরিটি একটি কালেকশন স্ক্যানের উপর নির্ভর করবে। - কোয়েরি হিন্টের সাথে
$textব্যবহার করা যায় না। - টেক্সট সার্চযুক্ত কোয়েরি
$naturalঅনুযায়ী সর্ট করা যায় না।