2017-04-02 103 views
0

直接在数据库中,我得到我的结果上使用此命令后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"} 
) 

蒙戈:: OperationFailure在/搜索未知运营商:$ 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) 

这给了错误

蒙戈:: OperationFailure在/搜索必须有$元投影所有$元排序键

有没有人有我的错在哪里的建议?我认为我错了。

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

回答

0

在MongoMapper谷歌A组用户指出我朝着正确的方向

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