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

时间:2020-05-21 14:51:34

标签: azure-cognitive-search fuzzy-search

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

使用高级搜索功能(例如“模糊搜索”和“通配符搜索”)遇到严重问题。 目前在我的索引字段上使用Standard Lucene Analyzer。

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

与模糊搜索存在相同的问题。如果我搜索“ terminate〜”,那么我什么都没有。

如果我使用“ Microsoft分析器 ”,情况似乎会更好。至少模糊搜索和通配符至少返回某些内容...

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

1 个答案:

答案 0 :(得分:5)

您完全正确,这是由于EN.Lucene分析器如何标记文本。 lucene分析器对每个术语都采用积极的词干。例如,terminate,终止,terminates将全部标记为索引中的标记“ termi”。另一方面,使用通配符或模糊搜索are not analyzed at all的查询中的术语。

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

另一方面,Microsoft分析器要先进一些,并且使用lemmatization而不是阻止。这意味着所有生成的令牌应为有效的英语单词。例如,终止,终止和终止将大部分保留在索引中,对于那些非常依赖通配符和模糊搜索的情况,这将是一个较好的选择。