টেক্সট সার্চ ব্যবহার করুন

কোনো কালেকশনের মধ্যে নির্দিষ্ট স্ট্রিং অনুসন্ধান করতে Cloud Firestore টেক্সট সার্চ ফিচার ব্যবহার করুন।

শুরু করার আগে

টেক্সট সার্চ ব্যবহার শুরু করার আগে, নিম্নলিখিত বিষয়গুলো করুন:

  1. নিশ্চিত করুন যে আপনার একটি বিদ্যমান MongoDB সামঞ্জস্যপূর্ণ অপারেশনস ডেটাবেসে অ্যাক্সেস আছে, অথবা একটি ডেটাবেস তৈরি করে সেটিতে সংযোগ স্থাপন করুন

  2. আপনার একটি টেক্সট ইনডেক্স আছে কিনা তা নিশ্চিত করুন, অথবা একটি টেক্সট ইনডেক্স তৈরি করুন

ফিল্টারের ভিতরে টেক্সট সার্চ করতে $text অপারেটরটি ব্যবহার করা হয়। $search আর্গুমেন্টে কাঙ্ক্ষিত স্ট্রিংটি উল্লেখ করুন।

সাধারণ টেক্সট সার্চ করার জন্য নিম্নলিখিত কমান্ডটি চালান:

  # Find search
  db.cities.find({ $text: { $search: "french bread" } })

  # Aggregation search
  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 search
  db.cities.find({ $text: { $search: "\"best french bread\"" } })

  # Aggregation search
  db.cities.aggregate([
    { $match: { $text: { $search: "\"best french bread\"" } } },
  ]);

একটি শব্দ সংমিশ্রণ অনুসন্ধান করুন

আপনার টেক্সট সার্চকে আরও সুনির্দিষ্ট করতে, একাধিক পদের একটি শৃঙ্খল নির্দিষ্ট করুন। উদাহরণস্বরূপ, নিম্নলিখিত সার্চটি best AND french AND ("bread" OR "is") এই সংমিশ্রণের সাথে মেলে এমন ডকুমেন্টগুলো ফেরত দেয়:

  # Find search
  db.cities.find({ $text: { $search: "\"best\" \"french\" bread is" } })

  # Aggregation search
  db.cities.aggregate([
    { $match: { $text: { $search: "\"best\" \"french\" bread is" } } },
  ]);

একটি পদ বাদ দিন

টেক্সট সার্চ থেকে কোনো শব্দ বাদ দিতে, শব্দটির আগে একটি হাইফেন (-) যোগ করুন:

  # Find search
  db.cities.find({ $text: { $search: "best bread -french"} })

  # Aggregation search
  db.cities.aggregate([
    { $match: { $text: { $search: "best bread -french" } } },
  ]);

প্রাসঙ্গিকতা স্কোর গণনা করুন

টেক্সট সার্চের মাধ্যমে মিলে যাওয়া ডকুমেন্টগুলোর প্রাসঙ্গিকতা স্কোর গণনা করতে {$meta: "textScore"} এক্সপ্রেশনটি ব্যবহার করুন। ফলাফলগুলোকে স্কোরের অবরোহী ক্রমে সাজাতে, একটি সর্ট এক্সপ্রেশনে $meta ব্যবহার করুন। নিম্নলিখিত উদাহরণগুলো বিবেচনা করুন, যেখানে SCORE_FIELD হলো স্কোরের মান সংরক্ষণ করতে ব্যবহৃত ফিল্ডের নাম:

  # Find search
  db.cities
    .find({ $text: { $search: "best french bread" } })
    .sort({ SCORE_FIELD: { $meta: "textScore" } })

  # Aggregation search
  db.cities.aggregate([
    { $match: { $text: { $search: "best french bread" } } },
    { $sort: { "SCORE_FIELD": { $meta: "textScore"} } },
  ]);

আপনি প্রজেকশন এক্সপ্রেশনেও টেক্সট স্কোর ব্যবহার করতে পারেন। উদাহরণস্বরূপ:

  # Find search
  db.cities
    .find({ $text: { $search: "best french bread" } })
    .project({ score: { $meta: "textScore" } })

  # Aggregation search
  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 অনুযায়ী সর্ট করা যায় না।