【发布时间】:2014-08-26 04:26:50
【问题描述】:
我有以下全文搜索查询示例:
db.collection.find({ $text: { $search: "dog cat" } })
这将返回包含dog OR cat 的文档,但我想按相关性对结果进行排序:
- 应首先列出包含所有搜索词的结果,
- 紧随其后的是仅包含一个搜索词的词。
当然,我正在寻找一种同样适用于 3 个或更多搜索词的解决方案。
我发现有一个aggreagation pipeline in MongoDB,可能是太晚了,我的大脑被炸了,但我不知道在这种情况下我该如何使用它。
--- Node.js 和 MongoJS 中的解决方案 ---
为了将所有内容保存在一个地方以供将来参考,Tug Grall 的解决方案在 Node.js / MongoJS 中实现:
.get(function(req, res) {
db.docs.find({ $text: { $search: req.query.q } }, {score : { $meta: "textScore" } })
.sort( { score: { $meta: "textScore" } }, function(err, results) {
if (err) {
res.send(err);
} else {
res.json(results);
}
} );
});
【问题讨论】: