sql >> データベース >  >> NoSQL >> MongoDB

MongoDB diacriticInSensitive検索では、すべてのアクセント付き(発音区別符号付きの単語)行が期待どおりに表示されない、またはその逆

    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 :大文字と小文字を区別+発音区別符号



    1. RedisSCANマッチング

    2. タイムエクスプレスとredisセッションの有効期限

    3. ANDとORの両方でmongodbクエリ

    4. HDFSフェデレーションとアーキテクチャの概要