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 仅包含 albus
或 Albus
的文档,但 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_name
、email
和 last_name
都需要映射为 autocomplete type,因此像 albus
这样的名称将被索引为 a
、al
、alb
、albu
、albus
。显然,这将大大增加您的索引大小。
另一件需要考虑的事情是调整 maxGrams
和 tokenization
参数。这将允许非常长的名称仍然按预期工作,如果你想允许像 lbu
匹配 albus
.
这样的子字符串匹配
我正在尝试实现 MongoDB 的搜索功能,这是我正在使用的聚合管道:
[
{
'$search': {
'text': {
'query': 'albus',
'path': [
'first_name', 'email', 'last_name'
]
}
}
}, {
'$project': {
'_id': 1,
'first_name': 1,
'last_name': 1
}
}, {
'$limit': 5
}
]
命令 returns 仅包含 albus
或 Albus
的文档,但 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_name
、email
和 last_name
都需要映射为 autocomplete type,因此像 albus
这样的名称将被索引为 a
、al
、alb
、albu
、albus
。显然,这将大大增加您的索引大小。
另一件需要考虑的事情是调整 maxGrams
和 tokenization
参数。这将允许非常长的名称仍然按预期工作,如果你想允许像 lbu
匹配 albus
.