Solr筛选查询异常:组合条件无结果问题咨询
问题原因与解决方案
- 核心问题是缺失字段的否定查询语法不对:
-tags:*在多数搜索引擎(比如Elasticsearch)里没法正确匹配“未索引tags字段”的文档。tags:*是匹配所有有tags字段且值非空的文档,-tags:*会排除这些,但对于根本没有tags字段的文档,部分引擎不会把它们纳入这个逻辑的匹配范围——因为字段不存在时,tags:*的判断既不成立也不否定,导致整个OR组合的逻辑失效。 - 单独用
-tags:*能出结果可能是引擎的特殊临时处理,但组合后两种条件的逻辑就冲突了,所以没命中任何结果。 - 正确的筛选逻辑应该用字段存在性判断替代
-tags:*,以Elasticsearch为例,筛选查询要写成:
如果用DSL语法的话,更清晰的写法是:(tags:("suf" OR "soc" OR "sos") OR NOT exists:tags){ "query": { "bool": { "should": [ {"terms": {"tags": ["suf", "soc", "sos"]}}, {"bool": {"must_not": {"exists": {"field": "tags"}}}} ] } } } - 这个逻辑的作用是:要么tags字段包含指定标签,要么tags字段根本不存在,完美覆盖你需要的两种情况。
内容的提问来源于stack exchange,提问作者Ossian Sandberg
相关产品推荐
相关产品推荐

