“模糊”在MongoDB的$ searchBeta聚合阶段如何工作?

问题描述 投票:0回答:1

我不太了解模糊在聚合的$ 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

我不太明白为什么我的结果为空,所以如果有人解释我做错了,将不胜感激。

mongodb full-text-search mongodb-atlas-search
1个回答
0
投票

我认为正在发生的事情: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() 
© www.soinside.com 2019 - 2024. All rights reserved.