node.js - MongoDB/Node.js-mongoose-text-search 中的全文搜索

标签 node.js mongodb full-text-search mongoose text-search

我正在尝试使用 mongoose-text-search 插件在 MongoDB 和 Node.js 上执行全文搜索。我正在关注 https://github.com/aheckmann/mongoose-text-search 中的示例代码我的代码如下所示。我不断收到错误消息: “错误:未启用文本搜索。 不明确的” 我按照 Installing plugins for mongoose - getting error 的指示进行操作, 这让我进入了 MongoDB 网站:http://docs.mongodb.org/manual/tutorial/enable-text-search . 但是,在我通过键入命令启用文本搜索后:

mongod --setParameter textSearchEnabled=true

在终端中,我启动了我的应用程序并遇到了一个额外的错误。它指出: “MongoError:E11000 重复键错误索引:meddb.tweets.$id_1 dup key:{:null} 这是错误:错误:未启用文本搜索 未定义”

如果你们中的任何人遇到此错误并找到解决方法,请让我知道我遗漏或需要更改的内容。

var mongoose = require('mongoose');
var textSearch = require('mongoose-text-search');
var Schema = mongoose.Schema;
var twitterSchema = new Schema ({
        id: {type: Number, index: {unique: true, dropDups: true}},
        created_at: Date,
        user: [{
                id: Number,
                name: String,
                screen_name: String,
                location: String
        }],
        text: String,
        keywords: []
});

twitterSchema.plugin(textSearch);

twitterSchema.index({keywords: 'text' });

var Tweets = mongoose.model('Tweets', twitterSchema);

Tweets.create({text: 'flu', keywords: ['disease', 'doctor', 'shots']}, function(err){
    if(err){
        console.log('First error: ' + err);
    }

    Tweets.textSearch('shots', function(err, output){
        if(err){
            console.log('This is error: ' + err)
        }

        var inspect = require('util').inspect;
        console.log(inspect(output, {depth: null}));

   });
});

exports.Document = function(db) {
  return db.model('Tweets');
};

最佳答案

mongoose-text-search 插件对我有用。我必须将 textSearchEnabled 设置为 true。我没有在启动时尝试将它作为参数,但是一旦我的 mongod 实例已经运行,它就起作用了:

use admin
db.runCommand({'setParameter':1,"textSearchEnabled":true})
use <my db>
<my db>.<my colleciton>.ensureIndex({"$**":"text"}) //Beware! "$**" indexes the entire document

此外,您可能真的想考虑使用 Elasticsearch 而不是 Mongo 的 FTS。 Mongo的FTS解决方案是not production ready (查看警告)。我对 Elasticsearch 的经验也有限,但发现它非常令人印象深刻。

如果您确实选择了 Elasticsearch 路线并且仍然想使用 Mongo,那么有一些不错的选择:

  • A river ,这需要打开 replica set 这样 river 就可以监控 oplog(参见 wiki)
  • Mongoosastic ,它可以很好地插入 Mongoose 进行查询,并通过写入 Mongo 和 ES 使 ES 与 Mongo 保持同步。

更新 从 2.6 开始,Mongo 默认启用文本搜索。

关于node.js - MongoDB/Node.js-mongoose-text-search 中的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849650/

相关文章:

search - Solr 在大量方面值上的扩展能力如何?

java - 使用 Solr CELL 的 ExtractingRequestHandler 从包格式中索引/提取文件

node.js - 请求正文中的 JSON 数据未使用 body-parser 进行解析

mongodb - Mongo 查询 : how to $lookup with DBRef

mongodb - 在嵌套文档上使用 mongo 进行 MapReduce

javascript - 聚合将文档键展开为新文档

mysql - 无法使用node-mysql分页

Node.js读取文件,如果存在则追加数据,如果不存在则创建文件

node.js - 如何将填充的 Mongoose 对象传递给渲染代码?

mysql - Laravel 5 中的全文搜索