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

MongoDBテキストインデックスエラー:言語オーバーライドはサポートされていません

    解決策:

    default_languageを設定します およびlanguage_override 同じリテラル値(この場合は「en」)に変更します。

    どうやってここに来たのか...

    Mongo 2.6.1でも、同じ問題が発生しました。

    私の場合、 language_overrideを使用してインデックスを作成しました サポートされていない値を持つドキュメントがすでに存在する言語フィールドを指します(例:'ar'-アラビア語)。

    インデックスの作成方法は次のとおりです。

    db.users.ensureIndex({ 
      "displayName": "text", 
      "about": "text", 
      "email": "text" 
    }, { 
      "name": "users_full_text", 
      "default_language": "en",
      "language_override": "language"
    });
    

    default_languageにフォールバックすることを望んでいました language_overrideの場合 値はサポートされていませんが、明らかにサポートされていません。モンゴの言うことは次のとおりです:

    {
      "createdCollectionAutomatically" : false,
      "numIndexesBefore" : 3,
      "ok" : 0,
      "errmsg" : "language override unsupported: ar",
      "code" : 17262
    }
    

    OK、結構です。インデックスは作成されませんでしたが、language_overrideなしで作成できるはずですよね?間違っています-言語オーバーライドが指定されていなくても、mongoで同じエラーが発生します

    インデックスの作成に失敗したため、どこにも表示されない壊れたバージョンのインデックスが残っているため、削除できません( db.users.getIndexes() 名前でドロップしても機能しません。

    結局、 language_override を設定することで、なんとかインデックスを修正することができました。 次のように、リテラル値'en'に変換します:

    db.users.ensureIndex({ 
      "displayName": "text", 
      "about": "text", 
      "email": "text" 
    }, { 
      "name": "users_full_text", 
      "default_language": "en",
      "language_override": "en" 
    });  
    

    ...モンゴが返信するもの:

    {
      "createdCollectionAutomatically" : false,
      "numIndexesBefore" : 3,
      "numIndexesAfter" : 4,
      "ok" : 1
    }
    

    フラ。



    1. MongoDBインデックスと$or演算子

    2. mongoDBインジェクション

    3. MongoDB:コレクション内のCount()の呼び出しとカウントの追跡

    4. テキスト検索で結果がないMongoDBPHP