假设我的 mongodb 集合中有一个名为 products 的产品列表,测试数据如下
Samsung Mobile Phone
Samsung Fridge
Samsung Washing Machiene
我可以使用以下 mongo 聚合查询来激活相关搜索
db.products.aggregate(
[{
"$match": {
"$and": [{
"status": "active"
}, {
"delete": false
}, {
"$text": { $search: "Samsung Mobile" }
}]
}
},
{ $sort: { score: { $meta: "textScore" } } }
]
);
问题是我无法使用部分关键字获得结果,例如“Samsun”。这将为我提供空结果,下面给出带有空结果的完整聚合查询
db.products.aggregate(
[{
"$match": {
"$and": [{
"status": "active"
}, {
"delete": false
}, {
"$text": { $search: "Samsun" }
}]
}
},
{ $sort: { score: { $meta: "textScore" } } }
]
);
最佳答案
考虑到产品名称最多只有几个单词,使用 $text
搜索产品名称之类的内容有点过分了。在 mongodb 中 $text
最适合产品描述或规范等内容,以便您的用户可以搜索可能出现在有关产品或评论等的短段落中的关键字。对于产品名称等内容,我将重新开始一个简单的$regex寻找部分匹配,尽管事实上您不会获得像这样的 textScore
值:
db.products.aggregate([
{
"$match": {
"status": "active",
"delete": false,
"name": {
$regex: "Samsun",
$options: "i"
}
}
}
])
或者,如果您不打算进行进一步的aggregate
阶段,那么一个简单的find
将完成这样的工作:
db.products.find({
"status": "active",
"delete": false,
"name": {
$regex: "Samsun",
$options: "i"
}
})
如果您使用 Atlas,则可以使用 通配符
或 自动完成
进行部分匹配。
优秀How to Run Partial Match Atlas Search Queries资源有一些 Node 代码示例,可以很好地解释它,但需要一些预配置。
关于mongodb - 如何在mongodb中实现部分文本匹配的相关搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77599962/