【问题标题】:MongoMapper - Full Text SearchMongoMapper - 全文搜索
【发布时间】:2017-04-02 05:23:44
【问题描述】:

直接在数据库上使用这个命令我得到了我想要的结果

db.products.find({$text: {$search: "some product"}}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}})

但在 MongoMapper 中使用它时出现错误。 没有 score 字段的搜索不会产生任何错误

@products = Product.where(
    '$text' => {'$search' => @search_string}
)

但是,当我尝试添加排序字段时,我会遇到问题

@products = Product.where(
    '$text' => {'$search' => @search_string}, :score => {'$meta' => "textScore"}
)

Mongo::OperationFailure at /search 未知操作符:$meta

使用原始查询方法也会失败

@products = MongoMapper.database['products'].find(
    '$text' => {'$search' => @search_string}, :score => {'$meta' => "textScore"}
)

我尝试运行的完整查询是

 @products = Product.where(
    '$text' => {'$search' => @search_string},:score => {'$meta' => "textScore"}
).sort(:score => {'$meta' => "textScore"}).limit(5)

这给出了错误

/search 处的 Mongo::OperationFailure 必须有所有 $meta 排序键的 $meta 投影

有人对我哪里出错有建议吗?我假设我用错了。

已安装的版本。 mongo_mapper (0.14.0, 0.13.1)

【问题讨论】:

    标签: ruby mongodb mongomapper


    【解决方案1】:

    MongoMapper Google 组的一位用户为我指明了正确的方向

    @products = Product.where(
    '$text' => {'$search' => @search_string}).fields(:score => {'$meta' => "textScore"})
    

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      相关资源
      最近更新 更多