2016-12-14 4 views
2

私は自分のアプリに検索結果ビューを実装しています。 私は、mongooseが内部的に全文検索機能に$ textを提供していることを知りました。mongooseインデックスは既に別のオプションで存在しています

私はここで私は私のルーティングファイルのルートに入れたコードだ/ posts.js

Post.find({$text: {$search : 'please work!'}}).exec(function (err, posts) {...}) 

私が思い付くのエラーメッセージが以下であるPost.js

するには、以下の
PostSchema.index({desc: 'text'}); //for example 

をコードを置きます

Index with pattern: { _fts: "text", _ftsx: 1 } already exists with different options 

このエラーを処理する方法を知っている人はいますか? ありがとうございます。

答えて

3

テキストインデックスが定義されているフィールドを確認してください。現在、mongodbはコレクションごとに1つのテキストインデックスのみを許可しています。したがって、desc列にテキスト索引を定義し、その索引を他の列に使用しようとすると、このエラーが発生します。

インデックスを照会し、作成した列を参照できますか。あなたは

db.collection.getIndexes() 

を行うことができますインデックスを取得すると、あなたは、単にこのインデックス

db.collection.dropIndex('desc_text'); 
を落とすも、このインデックスを使用するために、他の列の範囲にしたい場合は、それが今、この

[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "some.ns" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "_fts" : "text", 
      "_ftsx" : 1 
     }, 
     "name" : "desc_text", 
     "ns" : "some.ns", 
     "weights" : { 
      "title" : 1 
     }, 
     "default_language" : "english", 
     "language_override" : "language", 
     "textIndexVersion" : 2 
    } 
] 

のようなものを返します。

とし、テキストインデックスでカバーしたいすべての列を含めて再作成します。

db.collection.createIndex({ 
    title:'text;, 
    body: 'text;, 
    desc: 'text', 
    ...... and so on 
}); 
+0

あなたの明確かつ迅速な解決に感謝します。それは今働きます! – supergentle

+0

私の場合、列名を変更して、 –

+0

ofcourseを削除して再作成する必要がありました。インデックスが定義されている列が1つあれば、インデックスを再作成する必要があります。 –

関連する問題