猫鼬,nodejs,全文搜索

Posted

技术标签:

【中文标题】猫鼬,nodejs,全文搜索【英文标题】:Mongoose, nodejs, full text search 【发布时间】:2014-11-17 08:35:47 【问题描述】:

我正在尝试使用 Mongoose 和 nodejs 设置一个简单的关键字全文搜索,这是目前的代码:

var db = mongoose.createConnection('localhost', config.mongoDbName)
    , ContSchema = Schema(
        'idUser': String,
        'title': String,
        'category': String,
        'slug': String,
        'description': String
      )
      .index(
      'title':'text',
      'description':'text'
    )
 , ContModel = db.model('Cont', ContSchema);

db.on('error', function (err) 

        console.error.bind(console, 'Mongoose connection error:' + err);
    );
    db.once('open', function () 

      process.stdout.write('Connection to mongodb db done...');
    );

然后我做搜索查询:

var getAllBy = function (limit, offset, keywords) 

       var sort
        , find
        , findScore;

       if (!!keywords) 

        find = '$text':'$search':keywords;
        findScore = 'score':'$meta':'textMatchScore';
        sort = 'score':'$meta':'textMatchScore';

        else 

        sort = '_id':'desc';
       

       return new RSVP.Promise(function (resolve, reject) 

        ContModel.find(find, findScore).limit(limit).skip(offset).sort(sort).exec(function (err, data) 

          if (err)

            reject(err);
           else 

            resolve(data);
          
        );
       );

它不起作用,它在控制台中返回此错误:MongoError: Can't canonicalize query: BadValue bad sort specification

我实际上无法找到真正的问题,你能帮帮我吗?

谢谢

【问题讨论】:

您使用的是哪个版本的 MongoDB?此处使用的文本搜索语法仅适用于 2.6 版本 @Neil Lunn MongoDB shell 版本:2.6.4 仅供参考,您可以使用较新的外壳并连接到较旧的服务器。所以这确实是我要问的“服务器版本”。 @NeilLunn sec 我找不到如何检查服务器版本:D @NeilLunn running mongod: 2014-09-23T10:24:47.624+0200 [initandlisten] db version v2.6.4 这是正确的信息吗? :D 【参考方案1】:

这里你的关键字不正确,查看$meta运算符下的正确语法,目前只有“textScore”:

  find = '$text':'$search':keywords;
  findScore = 'score':'$meta':'textScore';
  sort = 'score': '$meta':'textScore' 

【讨论】:

似乎有什么进展,谢谢,但现在看看我明白了:MongoError: Can't canonicalize query: BadValue unsupported $meta operator: textMatchScore @sbaaaang 所以就像我说的,检查服务器版本db.serverStatus().version 会这样做。但我主要看到你没有改变任何东西。 $meta 关键字是“textScore”而不是“textMatchScore” 是的,抱歉没有注意到更改,我复制粘贴了您的完整代码,出现相同的错误 我从 mongo shell db.serverStatus().version = 2.6.4 确认 @sbaaaang 如果您更改了代码,怎么会出现同样的错误?该错误指定了此处使用的错误值。

以上是关于猫鼬,nodejs,全文搜索的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬全文搜索不起作用

使用 mongoose 全文搜索和 KeystoneJS 分页

nodejs + mongodb实现模糊查询与全文搜索

使用 Mongoose 在 Node JS 中进行全文搜索

全文搜索之MySQL与ElasticSearch搜索引擎

全文搜索是怎么实现的?