MongoDB memberi kita kemampuan untuk membuat indeks teks wildcard.
Indeks teks karakter pengganti mirip dengan indeks karakter pengganti, kecuali bahwa indeks teks karakter pengganti mendukung $text
operator, sedangkan indeks wildcard tidak.
Oleh karena itu, membuat setiap jenis indeks sangat mirip dalam arti keduanya berbagi karakter pengganti $**
pola bidang.
Contoh
Misalkan kita memiliki koleksi yang disebut posts
, dan berisi dokumen yang terlihat seperti ini:
{ "_id" : 1, "title" : "Title text...", "body" : "Body text...", "abstract" : "Abstract text...", "tags" : [ "tag1", "tag2", "tag3" ] }
Kita bisa membuat indeks teks wildcard pada koleksi itu seperti ini:
db.posts.createIndex( { "$**": "text" } )
Keluaran:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Itu menggunakan karakter pengganti $**
pola bidang untuk membuat indeks pada semua bidang teks. Saat Anda membuat indeks seperti ini, MongoDB mengindeks setiap bidang yang berisi data string untuk setiap dokumen dalam koleksi.
Melakukan hal ini dapat berguna jika koleksi berisi banyak konten tidak terstruktur, dan tidak ada konsistensi bidang teks dalam dokumen. Dalam kasus seperti itu, Anda tidak akan dapat secara eksplisit menyertakan bidang dalam indeks karena Anda tidak akan tahu bidang mana yang akan ada di dokumen.
Bidang Berbobot
Anda dapat menggunakan weights
parameter untuk menetapkan bobot yang berbeda ke bidang dalam indeks teks karakter pengganti.
Contoh:
db.posts.createIndex(
{ "$**": "text" },
{ weights: {
body: 10,
abstract: 5
}
}
)
Keluaran:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Dalam hal ini, body
bidang mendapat bobot 10
dan abstract
bidang mendapat bobot 5
. Ini berarti bahwa body
bidang memiliki dampak dua kali lipat dari bidang abstrak, dan sepuluh kali dampak dari semua bidang teks lainnya (karena akan diberi bobot default 1).
Setelah membuat indeks itu, jika kita memanggil getIndexes()
untuk mengembalikan semua indeks untuk koleksi, kita dapat melihat bobot yang diberikan pada kolom:
db.posts.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "$**_text", "weights" : { "$**" : 1, "abstract" : 5, "body" : 10 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
Seperti yang diharapkan, body
bidang mendapat 10
, abstract
bidang mendapat 5
, dan yang lainnya mendapatkan 1
.