Azure 认知搜索标准 Lucene 分析器通配符和模糊搜索问题

Azure Cognitive Search standard Lucene analyzer wildcard and fuzzy search issues

这是 Azure 认知搜索团队的问题。

'fuzzy search' 和 'wildcard search' 等高级搜索功能面临严重问题。 目前在我的索引字段上使用标准 Lucene 分析器。

系统 return 搜索查询“terminate”的结果,结果包含:终止,终止,终止,等等。所以结果看起来不错。但是,当我尝试搜索“*terminat****”(当然使用 queryType=full 参数)时,搜索没有 returning 任何结果。根据文档,通配符搜索应该 return *'terminate', 'termination', 'terminates'*** 和其他以 'terminat*' 开头的词.

与模糊搜索相同的问题。如果我搜索 'terminate~' 我根本没有得到任何结果。

如果我使用“Microsoft Analyzer”,情况似乎会好一些。至少模糊搜索和通配符 returns 至少有一些...

这是一个错误吗?或者这是预期的行为?可能我误解了文档?

你没看错,这是由于 EN.Lucene 分析器如何标记文本。 Lucene 分析器对每个术语应用积极的词干提取。例如,terminate、termination、terminates 都将被标记化为索引中的标记 "termi"。另一方面,使用通配符或模糊搜索的查询中的术语 are not analyzed at all.

这意味着在索引时,您的文档在倒排索引中只有标记 "termi",但是在搜索时,术语 "terminat" 保持完整(不会减少到 "termi").模糊搜索有 2 个编辑距离的限制,因此 "terminat" 永远不会匹配单独使用模糊搜索的 "termi"。通配符也无济于事,因为 "terminat*" 也不匹配。

另一方面,Microsoft 分析器更高级一些,使用词形还原而不是词干提取。这意味着所有生成的标记都应该是有效的英文单词。例如,terminate、terminates 和 termination 将大部分保留在索引中,并且对于大量依赖通配符和模糊搜索的场景来说是一个更好的选择。