Melakukan pencarian teks dengan Amazon DocumentDB - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Melakukan pencarian teks dengan Amazon DocumentDB

Fitur pencarian teks lengkap asli Amazon DocumentDB memungkinkan Anda melakukan pencarian teks pada kumpulan data tekstual besar menggunakan indeks teks tujuan khusus. Bagian ini menjelaskan fungsionalitas fitur indeks teks dan memberikan langkah-langkah tentang cara membuat dan menggunakan indeks teks di Amazon DocumentDB. Batasan pencarian teks juga terdaftar.

Fungsionalitas yang didukung

Pencarian teks Amazon DocumentDB mendukung fungsionalitas yang kompatibel dengan MongoDB API berikut:

  • Buat indeks teks pada satu bidang.

  • Buat indeks teks majemuk yang menyertakan lebih dari satu bidang teks.

  • Lakukan pencarian kata tunggal atau multi-kata.

  • Kontrol hasil pencarian menggunakan bobot.

  • Urutkan hasil pencarian berdasarkan skor.

  • Gunakan indeks teks dalam pipa agregasi.

  • Cari frase yang tepat.

Untuk membuat indeks teks pada bidang yang berisi data string, tentukan string “teks” seperti yang ditunjukkan di bawah ini:

Indeks bidang tunggal:

db.test.createIndex({"comments": "text"})

Indeks ini mendukung kueri pencarian teks di bidang string “komentar” dalam koleksi yang ditentukan.

Buat indeks teks majemuk pada lebih dari satu bidang string:

db.test.createIndex({"comments": "text", "title":"text"})

Indeks ini mendukung kueri pencarian teks di bidang string “komentar” dan “judul” dalam koleksi yang ditentukan. Anda dapat menentukan hingga 30 bidang saat membuat indeks teks majemuk. Setelah dibuat, kueri pencarian teks Anda akan menanyakan semua bidang yang diindeks.

catatan

Hanya satu indeks teks yang diizinkan pada setiap koleksi.

Daftar indeks teks pada koleksi Amazon DocumentDB

Anda dapat menggunakan getIndexes() pada koleksi Anda untuk mengidentifikasi dan mendeskripsikan indeks, termasuk indeks teks, seperti yang ditunjukkan pada contoh di bawah ini:

rs0:PRIMARY> db.test.getIndexes() [ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" }, { "v" : 1, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "contents_text", "ns" : "test.test", "default_language" : "english", "weights" : { "comments" : 1 }, "textIndexVersion" : 1 } ]

Setelah Anda membuat indeks, mulailah memasukkan data ke dalam koleksi Amazon DocumentDB Anda.

db.test.insertMany([{"_id": 1, "star_rating": 4, "comments": "apple is red"}, {"_id": 2, "star_rating": 5, "comments": "pie is delicious"}, {"_id": 3, "star_rating": 3, "comments": "apples, oranges - healthy fruit"}, {"_id": 4, "star_rating": 2, "comments": "bake the apple pie in the oven"}, {"_id": 5, "star_rating": 5, "comments": "interesting couch"}, {"_id": 6, "star_rating": 5, "comments": "interested in couch for sale, year 2022"}])

Menjalankan kueri pencarian teks

Jalankan kueri pencarian teks satu kata

Anda perlu menggunakan $text dan $search operator untuk melakukan pencarian teks. Contoh berikut mengembalikan semua dokumen di mana bidang teks diindeks berisi string “apel” atau “apel” dalam format lain seperti “apel”:

db.test.find({$text: {$search: "apple"}})

Output:

Output dari perintah ini terlihat seperti ini:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" } { "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit" } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }

Jalankan pencarian teks multi-kata

Anda juga dapat melakukan pencarian teks multi-kata pada data Amazon DocumentDB Anda. Perintah di bawah ini mengembalikan dokumen dengan bidang teks yang diindeks yang berisi “apple” atau “pie”:

db.test.find({$text: {$search: "apple pie"}})

Output:

Output dari perintah ini terlihat seperti ini:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" } { "_id" : 2, "star_rating" : 5, "comments" : "pie is delicious" } { "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit" } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }

Jalankan pencarian teks frase multi-kata

Untuk pencarian frase multi-kata, gunakan contoh ini:

db.test.find({$text: {$search: "\"apple pie\""}})

Output:

Perintah di atas mengembalikan dokumen dengan bidang teks diindeks yang berisi frase yang tepat “apple pie”. Output dari perintah ini terlihat seperti ini:

{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }

Jalankan pencarian teks dengan filter

Anda juga dapat menggabungkan pencarian teks dengan operator kueri lain untuk memfilter hasil berdasarkan kriteria tambahan:

db.test.find({$and: [{star_rating: 5}, {$text: {$search: "interest"}}]})

Output:

Perintah di atas mengembalikan dokumen dengan bidang teks yang diindeks yang berisi segala bentuk “minat” dan “star_rating” sama dengan 5. Output dari perintah ini terlihat seperti ini:

{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" } { "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }

Batasi jumlah dokumen yang dikembalikan dalam pencarian teks

Anda dapat memilih untuk membatasi jumlah dokumen yang dikembalikan dengan menggunakanlimit:

db.test.find({$and: [{star_rating: 5}, {$text: {$search: "couch"}}]}).limit(1)

Output:

Perintah di atas mengembalikan satu hasil yang memenuhi filter:

{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }

Urutkan hasil berdasarkan skor teks

Contoh berikut mengurutkan hasil pencarian teks berdasarkan skor teks:

db.test.find({$text: {$search: "apple"}}, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}})

Output:

Perintah di atas mengembalikan dokumen dengan bidang yang diindeks teks yang berisi “apel”, atau “apel” dalam format lain seperti “apel”, dan mengurutkan hasilnya berdasarkan seberapa relevan dokumen tersebut terkait dengan istilah pencarian. Output dari perintah ini terlihat seperti ini:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red", "score" : 0.6079270860936958 } { "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit", "score" : 0.6079270860936958 } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven", "score" : 0.6079270860936958 }

$textdan $search juga didukung untukaggregate,count,findAndModify,update, dan delete perintah.

Operator agregasi

Pipa agregasi menggunakan $match

db.test.aggregate( [{ $match: { $text: { $search: "apple pie" } } }] )

Output:

Perintah di atas mengembalikan hasil sebagai berikut:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" } { "_id" : 3, "star_rating" : 3, "comments" : "apple - a healthy fruit" } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" } { "_id" : 2, "star_rating" : 5, "comments" : "pie is delicious" }

Kombinasi dari operator agregasi lainnya

db.test.aggregate( [ { $match: { $text: { $search: "apple pie" } } }, { $sort: { score: { $meta: "textScore" } } }, { $project: { score: { $meta: "textScore" } } } ] )

Output:

Perintah di atas mengembalikan hasil sebagai berikut:

{ "_id" : 4, "score" : 0.6079270860936958 } { "_id" : 1, "score" : 0.3039635430468479 } { "_id" : 2, "score" : 0.3039635430468479 } { "_id" : 3, "score" : 0.3039635430468479 }

Tentukan beberapa bidang saat membuat indeks teks

Anda dapat menetapkan bobot hingga tiga bidang dalam indeks teks majemuk Anda. Bobot default yang ditetapkan ke bidang dalam indeks teks adalah satu (1). Berat adalah parameter opsional dan harus dalam kisaran 1 hingga 100000.

db.test.createIndex( { "firstname": "text", "lastname": "text", ... }, { weights: { "firstname": 5, "lastname":10, ... }, name: "name_text_index" } )

Perbedaan dengan MongoDB

Fitur indeks teks Amazon DocumentDB menggunakan indeks terbalik dengan algoritma frekuensi istilah. Indeks teks jarang secara default. Karena perbedaan dalam logika parsing, pembatas tokenisasi, dan lainnya, set hasil yang sama seperti MongoDB mungkin tidak dikembalikan untuk kumpulan data atau bentuk kueri yang sama.

Perbedaan tambahan berikut antara indeks teks Amazon DocumentDB dan MongoDB ada:

  • Indeks majemuk menggunakan indeks non-teks tidak didukung.

  • Indeks teks Amazon DocumentDB tidak peka huruf besar/kecil dan tidak sensitif terhadap diakritik.

  • Hanya bahasa Inggris yang didukung dengan indeks teks.

  • Pengindeksan teks bidang array (atau multi-kunci) tidak didukung. Misalnya, membuat indeks teks pada “a “dengan dokumen {“a”: [“apple”, “pie”]} akan gagal.

  • Pengindeksan teks wildcard tidak didukung.

  • Indeks teks unik tidak didukung.

  • Tidak termasuk istilah tidak didukung.

Praktik dan pedoman terbaik

  • Untuk kinerja optimal pada kueri penelusuran teks yang melibatkan pengurutan berdasarkan skor teks, sebaiknya Anda membuat indeks teks sebelum memuat data.

  • Indeks teks memerlukan penyimpanan tambahan untuk salinan internal yang dioptimalkan dari data yang diindeks. Ini memiliki implikasi biaya tambahan.

Batasan

Pencarian teks memiliki batasan berikut di Amazon DocumentDB:

  • Pencarian teks hanya didukung di klaster berbasis instans Amazon DocumentDB 5.0.