mongodb 3.2以降 、テキストインデックス 発音区別符号に鈍感です:
バージョン3では、テキストインデックスは発音区別符号に依存しません。つまり、インデックスは、ダイアクリティカルマークを含む文字と、マークされていない対応する文字(é、ê、eなど)を区別しません。より具体的には、テキストインデックスは、Unicode8.0文字データベースプロップリストでasdiacriticsに分類された文字を削除します。
したがって、次のクエリが機能するはずです。
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
ただし、Unicode 8.0リストで分音記号として分類されている場合でも、分音記号(¨)にバグがあるようです(JIRAの問題:SERVER-29918)
ソリューション
mongodb 3.4以降 この種のクエリを実行できる照合を使用できます:
たとえば、期待される出力を取得するには、次のクエリを実行します。
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
これにより、次のように出力されます:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
照合では、strength
実行する比較のレベルです
- 1 :基本文字のみ
- 2 :発音区別符号に敏感
- 3 :大文字と小文字を区別+発音区別符号