我不太了解模糊在聚合的$ searchBeta阶段如何工作。尝试在后端实现全文搜索时,没有得到想要的结果。去年(2019)发布了针对MongoDB的全文本搜索,因此除了文档之外,确实没有太多教程和/或参考资料可供参考。我已经阅读了文档,但仍然感到困惑,所以我想澄清一下。
假设我的数据库中有这5个文档:
{
"name": "Lightning Bolt",
"set_name": "Masters 25"
},
{
"name": "Snapcaster Mage",
"set_name": "Modern Masters 2017"
},
{
"name": "Verdant Catacombs",
"set_name": "Modern Masters 2017"
},
{
"name": "Chain Lightning",
"set_name": "Battlebond"
},
{
"name": "Battle of Wits",
"set_name": "Magic 2013"
}
这是我在MongoDB Compass中的汇总:
db.cards.aggregate([
{
$searchBeta: {
search: { //search has been deprecated, but it works in MongoDB Compass; replace with 'text'
query: 'lightn',
path: ["name", "set_name"],
fuzzy: {
maxEdits: 1,
prefixLength: 2,
maxExpansion: 100
}
}
}
}
]);
我期望我的结果是:
[
{
"name": "Lightning Bolt", //lightn is in 'Lightning'
"set_name": "Masters 25"
},
{
"name": "Chain Lightning", //lightn is in 'Lightning'
"set_name": "Battlebond"
}
]
我实际上得到的是:
[] //empty array
我不太明白为什么我的结果为空,所以如果有人解释我做错了,将不胜感激。
我认为正在发生的事情:db.cards.aggregate ...正在“名称”和“ set_name”字段中查找文档,这些单词的最大编辑量是“ lightn”查询的一个字符变体。卡集合中的文档包含大于2的编辑,因此您的预期结果是一个空数组。 “ Fuzzy用于查找与一个或多个搜索词相似的字符串”;与maxEdits和prefixLength一起使用。
您是否尝试过term operator with the wildcard option?我认为以下汇总将为您带来实际预期的结果。
e.g.
db.cards.aggregate([
{$searchBeta:
{"term":
{"path":
["name","set_name"],
"query": "l*h*",
"wildcard":true}
}}]).pretty()