Di bab ini, kami akan memperkenalkan pencarian teks penuh MongoDB, yang berbeda dari operator "like" SQL. Pencarian teks penuh MongoDB lebih efisien untuk pencarian teks dibandingkan dengan implementasi "like" di SQL.
Persiapkan data uji
Masukkan beberapa catatan ke dalam koleksi toko
db.stores.insert(
[
{ _id: 1, name: "Java Hut", description: "Kopi dan kue" },
{ _id: 2, name: "Burger Buns", description: "Hamburger gourmets" },
{ _id: 3, name: "Coffee Shop", description: "Hanya kopi" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "Pakaian diskon" },
{ _id: 5, name: "Java Shopping", description: "Produk Indonesia" }
]
)
Buat indeks teks
Untuk menggunakan kemampuan pencarian teks penuh, Anda perlu membuat indeks teks. Contoh:
db.stores.createIndex( { name: "text", description: "text" } )
Penjelasan:
- Buat indeks tipe teks untuk bidang nama dan deskripsi.
Catatan: Sebuah koleksi hanya mengizinkan satu indeks teks, tetapi indeks teks dapat mencakup beberapa bidang.
Operator $text
Gunakan operator $text untuk pencarian teks.
Syntax:
{ $text: { $search: "kata kunci pencarian" } }
Contoh:
db.stores.find( { $text: { $search: "java coffee shop" } } )
Penjelasan:
- Cari dokumen yang mengandung kata kunci "kopi", "toko", dan "java" di bidang nama dan deskripsi.
Output:
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Hanya kopi" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Kopi dan kue" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "Produk Indonesia" }
Pencarian frasa
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
Output
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Hanya kopi" }
Pengurutan relevansi
Secara default, hasil kueri $text tidak terurut. Kueri $text menghitung skor (textScore) untuk relevansi setiap dokumen. Kami dapat menggunakan skor ini untuk mengurutkan dan menampilkan dokumen dengan relevansi lebih tinggi di bagian atas.
db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } } // Mendeklarasikan untuk mengembalikan skor relevansi textScore
).sort( { score: { $meta: "textScore" } } ) // Tentukan pengurutan menggunakan textScore
Catatan: Pencarian teks penuh MongoDB tidak memberikan dukungan yang sangat baik untuk frasa Bahasa Cina.