MongoDB 聚合仅适用于精确字符串

MongoDB aggregate only working with exact string

我正在尝试实现 MongoDB 的搜索功能,这是我正在使用的聚合管道:

[
    {
        '$search': {
            'text': {
                'query': 'albus', 
                'path': [
                    'first_name', 'email', 'last_name'
                ]
            }
        }
    }, {
        '$project': {
            '_id': 1, 
            'first_name': 1, 
            'last_name': 1
        }
    }, {
        '$limit': 5
    }
]

命令 returns 仅包含 albusAlbus 的文档,但 return 对于 alb、[=15= 等查询不包含任何内容], 等等。在我在这里观看的演示视频中:https://www.youtube.com/watch?time_continue=8&v=kZ77X67GUfk,讲师能够根据子字符串进行搜索。

我目前使用的搜索索引是默认的动态索引。 我需要如何更改命令?

您需要使用 autocomplete 功能,因此您的查询将如下所示:

{
    $search: {
      "autocomplete": {
            'query': 'albus', 
            'path': [
               'first_name', 'email', 'last_name'
            ]
      }
   }
}

请注意,first_nameemaillast_name 都需要映射为 autocomplete type,因此像 albus 这样的名称将被索引为 aalalbalbualbus。显然,这将大大增加您的索引大小。

另一件需要考虑的事情是调整 maxGramstokenization 参数。这将允许非常长的名称仍然按预期工作,如果你想允许像 lbu 匹配 albus.

这样的子字符串匹配