Azure Cognitive Search与模糊搜索和自定义分析器的问题



我正在针对一些Azure搜索索引实现模糊搜索。我看到了一些不一致的地方,我不能完全弄清楚。这是一些背景。

我们有一些搜索索引。有人要求我们实现模糊搜索。Azure认知搜索支持此功能,但我发现搜索索引之间的行为不一致。

举个例子…假设我们有索引a和索引b。它们的模式可能如下所示:

指数

{
entityId: string
entityName: string
entityNameSuggester: string
}

index-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上的自定义分析器对字段进行字段模糊搜索确实产生了结果。

另一件奇怪的事情是,如果我修改针对index-a的字段模糊搜索查询,以针对建议者字段,而不是应用了自定义分析器的字段,那么搜索就会产生结果!

{
"search": "Bayer~",
"searchFields": "entityNameSuggester",
"top": 25,
"queryType": "full",
"searchMode": "all",
"count": true
}

对于索引-b也是如此,不同之处在于该查询对索引-b上的建议者字段和非建议者字段都产生结果,但只对索引-a上的建议者字段产生结果。

我不知道这是怎么回事。显然有什么东西导致这个在一个索引上工作,而在另一个索引上不起作用。如果有人能够透露一些光或提示问题可能是什么,我真的很感激!

您确定要对其执行字段搜索的字段具有满足搜索条件的数据吗?如果是,我建议删除自定义分析器并再次执行相同的测试。您的定制分析器会是罪魁祸首吗?

最新更新