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

Era*_*mir 1 fuzzy-search azure-cognitive-search

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

面临高级搜索功能的严重问题,例如“模糊搜索”和“通配符搜索”。目前在我的索引字段上使用标准 Lucene 分析器。

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

模糊搜索也有同样的问题。如果我搜索“终止〜”,我根本没有得到任何结果。

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

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

ram*_*SFT 5

你没看错,这是因为 EN.Lucene 分析器如何标记文本。Lucene 分析器对每个术语应用积极的词干提取。例如,终止、终止、终止都将被标记为索引中的标记“termi”。另一方面,根本不分析使用通配符或模糊搜索的查询中的术语。

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

另一方面,Microsoft 分析器更先进一些,并且使用词形还原而不是词干提取。这意味着所有生成的令牌都应该是有效的英语单词。例如,terminate、 terminates 和 terminate 将在索引中保持完整,并且对于非常依赖通配符和模糊搜索的场景将是一个更好的选择。