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.