Azure Cognitive Search单查询词下searchMode=any/all表现差异问询
Azure Cognitive Search searchMode 差异问题排查
你遇到的问题核心是查询语句的写法错误,导致被解析成了两个独立的搜索条件,而非单个正则查询,这才触发了searchMode的差异。
具体拆解:
- 你写的查询语句
plates:/.*003/.*,被Azure Cognitive Search解析器拆成了两部分:plates:/.*003/:限定在plates字段匹配正则.*003.*:一个独立的通配符搜索词,会在你指定的searchFields(dates、models、plates)中查找匹配项
- 当
searchMode=any时,只要满足两个条件中的任意一个即可,所以只要plates字段包含003的文档就会被返回 - 当
searchMode=all时,要求两个条件同时满足:但.*作为独立搜索词,经过标准分析器处理后会被视为无效(标准分析器会过滤特殊符号),无法匹配任何字段,因此没有结果返回
解决方法很简单:把正则表达式完整包裹在斜杠内,正确写法是plates:/.*003.*/。此时整个查询是单个搜索条件,searchMode=any和all的结果就会完全一致,因为单条件下两者没有区别。
另外补充一点:当查询语句中明确指定字段(比如plates:...)时,searchFields参数会被忽略,只会在指定字段内搜索,所以你设置的dates、models字段其实没参与这次查询(除了那个错误拆分出来的.*搜索词)。
内容的提问来源于stack exchange,提问作者VeryNiceArgumentException
相关产品推荐
相关产品推荐

