Описанието на Томалак за това как работи индексирането на текст е правилно, но всъщност можете да използвате текстов индекс за точно съвпадение по фраза на фраза със специален знак:
> 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" }