टेक्स्ट इंडेक्सिंग कैसे काम करता है, इस बारे में टोमालक का विवरण सही है, लेकिन आप वास्तव में एक विशेष वर्ण वाले वाक्यांश पर सटीक वाक्यांश मिलान के लिए टेक्स्ट इंडेक्स का उपयोग कर सकते हैं:
> db.test.drop()
> db.test.insert({ "_id" : 0, "t" : "hey look at all this #text" })
> db.test.insert({ "_id" : 1, "t" : "text is the best" })
> db.test.ensureIndex({ "t" : "text" })
> db.test.count({ "$text" : { "$search" : "text" } })
2
> db.test.count({ "$text" : { "$search" : "#text" } })
2
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
सटीक वाक्यांश मिलान वाक्यांश को दोहरे उद्धरण चिह्नों में घेरकर इंगित किया जाता है, जिसे "\"#text\""
जैसे शेल में से बचने की आवश्यकता होती है ।
टेक्स्ट इंडेक्स सामान्य इंडेक्स से बड़े होते हैं, लेकिन यदि आप बहुत से केस-असंवेदनशील सटीक वाक्यांश मिलान कर रहे हैं तो वे मानक इंडेक्स से बेहतर विकल्प हो सकते हैं क्योंकि वे बेहतर प्रदर्शन करेंगे। उदाहरण के लिए, किसी फ़ील्ड पर t
एक इंडेक्स के साथ { "t" : 1 }
, एक सटीक मिलान रेगेक्स
> db.test.find({ "t" : /#text/ })
एक पूर्ण अनुक्रमणिका स्कैन करता है। समरूप (लेकिन समकक्ष नहीं) टेक्स्ट क्वेरी
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
"text"
. शब्द वाले दस्तावेज़ों का पता लगाने के लिए टेक्स्ट इंडेक्स का उपयोग करेगा , फिर उन सभी दस्तावेज़ों को स्कैन करके देखें कि क्या उनमें पूरा वाक्यांश है "#text
".
सावधान रहें क्योंकि टेक्स्ट इंडेक्स केस संवेदी नहीं होते हैं। ऊपर दिए गए उदाहरण को जारी रखते हुए:
> db.test.insert({ "_id" : 2, "t" : "Never seen so much #TEXT" })
> db.test.find({ "t" : /#text/ })
{ "_id" : 0, "t" : "hey look at all this #text" }
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
{ "_id" : 0, "t" : "hey look at all this #text" }
{ "_id" : 2, "t" : "Never seen so much #TEXT" }