टेक्स्ट खोज का इस्तेमाल करना

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 के हिसाब से क्रम में नहीं लगाया जा सकता.