MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Pencarian diacriticInSensitive MongoDB tidak menampilkan semua baris beraksen (kata-kata dengan tanda diakritik) seperti yang diharapkan dan sebaliknya

Sejak mongodb 3.2 , indeks teks tidak peka diakritik:

Dengan versi 3, indeks teks tidak sensitif terhadap diakritik. Artinya, indeks tidak membedakan antara karakter yang mengandung tanda diakritik dan padanannya yang tidak bertanda, seperti é, , dan e. Lebih khusus lagi, indeks teks menghapus karakter yang dikategorikan sebagai diakritik dalam Daftar Prop Basis Data Karakter Unicode 8.0.

Jadi kueri berikut harus berfungsi:

db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );

tapi sepertinya ada bug dengan dieresis ( ), meskipun itu dikategorikan sebagai diakritik dalam daftar unicode 8.0 (masalah di JIRA:SERVER-29918 )

Solusi

sejak mongodb 3.4 anda dapat menggunakan susunan yang memungkinkan Anda melakukan kueri semacam ini:

misalnya, untuk mendapatkan hasil yang diharapkan, jalankan kueri berikut:

db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})

ini akan menampilkan:

{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }

dalam susunan, strength adalah tingkat perbandingan yang harus dilakukan

  • 1 :karakter dasar saja
  • 2 :sensitif diakritik
  • 3 :peka huruf besar/kecil + peka diakritik



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana Cara Membuat Skema Luwak dengan Array ID Objek?

  2. Bagaimana cara mendapatkan objectID setelah saya menyimpan objek di Mongoose?

  3. MongoDB Menggunakan Sharding dengan Operator Agregasi $lookup

  4. Ekspor hasil kerangka kerja agregasi mongodb ke koleksi baru

  5. Tarik dan tambahkan keset secara bersamaan dengan mongo