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

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 অনুযায়ী সাজানো যাবে না।