Deskripsi Tomalak tentang cara kerja pengindeksan teks sudah benar, tetapi Anda sebenarnya dapat menggunakan indeks teks untuk pencocokan frasa yang tepat pada frasa dengan karakter khusus:
> 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" }
Pencocokan frasa yang tepat ditunjukkan dengan mengapit frasa dalam tanda kutip ganda, yang perlu diloloskan dalam shell seperti "\"#text\""
.
Indeks teks lebih besar dari indeks normal, tetapi jika Anda melakukan banyak pencocokan frasa yang tidak peka huruf besar-kecil, maka itu bisa menjadi pilihan yang lebih baik daripada indeks standar karena kinerjanya lebih baik. Misalnya, pada bidang t
dengan indeks { "t" : 1 }
, ekspresi reguler yang sama persis
> db.test.find({ "t" : /#text/ })
melakukan pemindaian indeks penuh. Kueri teks analog (tetapi tidak setara)
> db.test.find({ "$text" : { "$search" : "\"#text\"" } })
akan menggunakan indeks teks untuk menemukan dokumen yang berisi istilah "text"
, lalu pindai semua dokumen tersebut untuk melihat apakah dokumen tersebut berisi frasa lengkap "#text
".
Hati-hati karena indeks teks tidak peka huruf besar-kecil. Melanjutkan contoh di atas:
> 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" }