Azure Search Service的search.ismatch()含特殊字符返回结果异常咨询
问题1:是否为预期行为
这是标准Lucene分析器的预期处理逻辑,并非Azure Search的bug。
标准Lucene分析器的默认处理规则包含两个影响你查询结果的逻辑:
- 会将
-、&、;这类非字母数字字符识别为分词分隔符,将knet-q&a拆分为knet、q、a三个独立词条 - 会自动过滤长度小于2的单字符词条,因此拆分出来的
q、a会被直接丢弃,最终只有knet参与查询匹配,所以返回结果仅包含带knet的内容
问题2:筛选器是否会调用自定义/keyword分析器
search.ismatch、search.ismatchscoring属于全文检索类的筛选函数,而非普通精准值筛选,查询时会正常调用对应字段配置的分析器,不管是系统预设的分析器、自定义分析器还是keyword分析器都会生效。
只有eq、in、gt这类普通OData筛选运算符,才会跳过分析器直接做精准值匹配。
问题3:是否推荐使用keyword分析器
如果你的业务场景需要保留特殊字符、支持正则匹配特殊字符,或者需要保留单字符词条参与匹配,非常推荐使用keyword分析器。keyword分析器会将整个字段内容作为单个完整词条存储,不会做分词处理、不会过滤特殊字符、也不会丢弃单字符,完全符合你的需求。如果需要兼顾大小写不敏感的匹配,你可以基于keyword分析器搭配小写转换过滤器做自定义分析器,避免大小写不匹配导致的查询失败。
内容的提问来源于stack exchange,提问作者Pratik Sharma
相关产品推荐
相关产品推荐

