MongoMapper - 全文搜索
MongoMapper - Full Text Search
直接在数据库上使用这个命令我得到了我想要的结果
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)
这给出了错误
Mongo::OperationFailure at /search must have $meta projection for all $meta sort keys
有人对我哪里出错有建议吗?我想我用错了。
已安装的版本。 mongo_mapper (0.14.0, 0.13.1)
MongoMapper Google 组的一位用户为我指出了正确的方向
@products = Product.where(
'$text' => {'$search' => @search_string}).fields(:score => {'$meta' => "textScore"})
直接在数据库上使用这个命令我得到了我想要的结果
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)
这给出了错误
Mongo::OperationFailure at /search must have $meta projection for all $meta sort keys
有人对我哪里出错有建议吗?我想我用错了。
已安装的版本。 mongo_mapper (0.14.0, 0.13.1)
MongoMapper Google 组的一位用户为我指出了正确的方向
@products = Product.where(
'$text' => {'$search' => @search_string}).fields(:score => {'$meta' => "textScore"})