我正在针对某些 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 上的建议者字段产生结果。
我不知道该怎么做。显然有什么原因导致它对一个索引起作用,但对另一个索引不起作用。如果有人能够阐明或暗示可能是什么问题,我将不胜感激!
答案 0 :(得分:0)
您确定要执行字段搜索的字段具有满足搜索条件的数据吗?如果是,我建议删除自定义分析器并再次执行相同的测试。您的自定义分析器可能是这里的罪魁祸首吗?