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