【发布时间】:2021-10-04 06:09:53
【问题描述】:
我正在针对一些 Azure 搜索索引实施模糊搜索。 我看到了一些我无法弄清楚的不一致之处......这里有一些背景。
我们有一些搜索索引。已要求我们实施模糊搜索。 Azure 认知搜索支持此功能,但我发现搜索索引之间的行为不一致。
为了示例... 假设我们有 index-a 和 index-b。他们的架构可能如下所示:
索引-a
{
entityId: string
entityName: string
entityNameSuggester: string
}
索引-b
{
entityId: string
entityName: string
entityNameSuggester: string
}
我们创建了一个自定义分析器,以允许使用特殊字符和contains 行为 (/.*searchTerm.*/) 进行搜索。 假设每个索引模式的entityName 字段都使用这个自定义分析器。建议字段是另一个字段的副本,用于自动完成。
我用 index-a 开始了我的模糊搜索测试。像这样的查询会产生结果:
{
"search": "Bayer",
"top": 25,
"queryType": "full",
"searchMode": "all",
"count": true
}
如果我们通过在搜索词上附加波浪号将其变为模糊搜索,则此查询也会产生结果:
{
"search": "Bayer~",
"top": 25,
"queryType": "full",
"searchMode": "all",
"count": true
}
到目前为止,一切都很好。但是,我们会进行现场搜索以缩小搜索范围。当我在对 index-a 进行模糊搜索时指定搜索字段时,我停止获取结果:
{
"search": "Bayer~",
"searchFields": "entityName",
"top": 25,
"queryType": "full",
"searchMode": "all",
"count": true
}
这似乎很奇怪,让我想知道应用于该字段的自定义分析器是否以某种方式影响了搜索。
所以我尝试针对 index-b 运行相同的查询(使用不同的搜索词)——实际上,我们的索引架构彼此完全不同,但它们中的每一个都有相同的自定义分析器应用于至少一个字段。我的期望是不会得到任何结果,但是,不知何故,使用 index-b DID 上的自定义分析器对字段进行字段模糊搜索会产生结果。
另一件奇怪的事情是,如果我针对 index-a 修改字段模糊搜索查询以针对建议者字段而不是应用了自定义分析器的字段,那么搜索会产生结果!
{
"search": "Bayer~",
"searchFields": "entityNameSuggester",
"top": 25,
"queryType": "full",
"searchMode": "all",
"count": true
}
对于 index-b 也是如此,不同之处在于此查询会为 index-b 上的建议者和非建议者字段生成结果,但仅针对索引-a 上的建议者字段。
我不知道该怎么做。显然有一些原因导致它在一个索引上起作用,但在另一个索引上不起作用。如果有人能够阐明问题可能是什么,我将不胜感激!
【问题讨论】:
标签: azure-cognitive-search fuzzy-search