MongoMapper - 全文搜索

时间:2017-04-02 05:23:44

标签: ruby mongodb mongomapper

直接在数据库上使用此命令,我得到了我之后的结果

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

但是在MongoMapper中使用它我遇到了错误。 没有得分字段的搜索不会产生任何错误

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

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

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

Mongo :: OperationFailure at / search unknown operator:$ 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)

1 个答案:

答案 0 :(得分:0)

MongoMapper Google小组的用户指出了我正确的方向

S := AB A | A B BA
AB := 'a' AB 'b' | empty
A := 'a' A | empty
B := 'b' B | 'b'
BA := 'b' BA 'a' | empty