Konsep "pencarian teks" di mongodb tidak berfungsi seperti itu. Alih-alih, konsepnya di sini adalah Anda mendefinisikan "bidang mutiple" di "indeks teks" Anda dan cukup cari istilahnya.
Katakanlah Anda memiliki "barang" seperti ini:
{ "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
{ "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
{
"_id" : ObjectId("55ba22594bde97b58133297b"),
"title" : "Hello world",
"suburb" : "melbourne"
}
Kemudian saya memutuskan untuk membuat indeks teks seperti ini:
db.junk.createIndex(
{ "title": "text", "suburb": "text" },
{ "weights": { "title": 10 } }
)
Kemudian saya melakukan pencarian menggunakan $text
:
db.junk.find(
{ "$text": { "$search": "Hello World Melbourne" } },
{ "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })
Yang memberikan hasil:
{
"_id" : ObjectId("55ba22594bde97b58133297b"),
"title" : "Hello world",
"suburb" : "melbourne",
"score" : 11.5
},
{
"_id" : ObjectId("55ba22414bde97b58133297a"),
"title" : "Hello world",
"score" : 1.5
},
{
"_id" : ObjectId("55ba22294bde97b581332979"),
"title" : "Hello there",
"score" : 1
}
Yang mana "keduanya" menelusuri semua bidang yang ditentukan dalam indeks dan juga mempertimbangkan "bobot" tambahan seperti yang diberikan ke bidang "pinggiran kota" dalam hal ini untuk menjadikannya peringkat yang lebih populer.
Jadi Anda tidak menggunakan kondisi tambahan dalam istilah, Anda menempatkan "semua" istilah dalam string kueri teks "satu" untuk mencari di beberapa bidang.