MongoDB - Pencarian Teks
Mulai dari versi 2.4, MongoDB mulai mendukung indeks teks untuk mencari di dalam konten string. ItuText Search menggunakan teknik stemming untuk mencari kata-kata tertentu dalam bidang string dengan membuang kata stop seperti stemming a, an, the, dll. Saat ini, MongoDB mendukung sekitar 15 bahasa.
Mengaktifkan Pencarian Teks
Awalnya, Pencarian Teks adalah fitur eksperimental tetapi mulai dari versi 2.6, konfigurasi diaktifkan secara default.
Membuat Indeks Teks
Perhatikan dokumen berikut di bawah posts koleksi yang berisi teks posting dan tag-nya -
> db.posts.insert({
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": ["mongodb", "tutorialspoint"]
}
{
"post_text" : "writing tutorials on mongodb",
"tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })
Kami akan membuat indeks teks pada bidang post_text sehingga kami dapat mencari di dalam teks posting kami -
>db.posts.createIndex({post_text:"text"})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Menggunakan Indeks Teks
Sekarang kita telah membuat indeks teks pada bidang post_text, kita akan mencari semua tulisan yang memiliki kata tersebut tutorialspoint dalam teks mereka.
> db.posts.find({$text:{$search:"tutorialspoint"}}).pretty()
{
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
Perintah di atas mengembalikan dokumen hasil berikut yang memiliki kata tutorialspoint dalam teks kiriman mereka -
{
"_id" : ObjectId("53493d14d852429c10000002"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [ "mongodb", "tutorialspoint" ]
}
Menghapus Indeks Teks
Untuk menghapus indeks teks yang ada, pertama-tama temukan nama indeks menggunakan kueri berikut -
>db.posts.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "mydb.posts"
},
{
"v" : 2,
"key" : {
"fts" : "text",
"ftsx" : 1
},
"name" : "post_text_text",
"ns" : "mydb.posts",
"weights" : {
"post_text" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
>
Setelah mendapatkan nama indeks Anda dari kueri di atas, jalankan perintah berikut. Sini,post_text_text adalah nama indeks.
>db.posts.dropIndex("post_text_text")
{ "nIndexesWas" : 2, "ok" : 1 }