1

mongoDB データベースでキーワード検索を実行しようとしています。mongoDB コンソールで:

db.logs.find({$text: {$search: 'key1'}})

正しい結果が得られます。しかし、nodejs コントローラーで mongoose-text-search を使用すると、エラーが発生します。これはスキーマの定義です:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var textSearch = require('mongoose-text-search');

var Log = new Schema({
    keywords: [String],
    description: String,
    videoId: String,
    logId: String,
    date: Date,
    robot: String
});

Log.plugin(textSearch);
Log.index({ keywords: 'text' });

module.exports = mongoose.model('log', Log);

コントローラーでは、特定の時点で次のことを行います。

Log.textSearch('key1', function(err,output) {
    if (err){
        res.send(500,err);
    } else {
        console.log(output);
    }           
});

応答は次のとおりです。

{"name":"MongoError","message":"no such command: text","ok":0,"errmsg":"no such command: text","code":59,"bad cmd":{"text":"logs","search":"key1"}}

さて、このメッセージだけでは、テキスト検索が機能していないと思われますが、前に示したとおりです。MongoDB シェル バージョン 3.0.2 を実行しているため、デフォルトでテキスト検索が有効になっています。

4

1 に答える 1

0

何らかの理由で、moongose のドキュメントを追うのに苦労していました... 結局のところ、これは通常のクエリで非常に簡単に実行できます (プラグインは必要ありません)。それがどのように行われるかについてのアイデアを与えるために(私の実際のコードではなく、アイデアをテストするために使用されたものです)

router.get('/keywordsearch', function (req,res) {

        var query = Log.find();

        var findKeywords = [];
        if (req.query.keywords != '')
        {
            var words = req.query.keywords.split(",");

            for (ii=0; ii<words.length; ii++)
                findKeywords[ii] = {keywords: words[ii].trim()};

            console.log(findKeywords);
            query.or(findKeywords);
        }

        query.exec(function (err,logs) {
            if (err){
                res.send(500,err);
            } else {
                req.logsList = logs;

                res.render('searchdb',{user:req.user,logs:req.logsList});
            }
        });

});

つまり、次を使用してキーワード検索を実行できます。

find({keyword: 'blablabla'})

また、多くのキーワードに OR 論理演算子を使用します。

于 2015-06-19T10:17:34.290 に答える