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