es-must和should同时使用should失效问题
相关概念
ElasticSearch——bool布尔查询
1、must (must字段对应的是个列表,也就是说可以有多个并列的查询条件,一个文档满足各个子条件后才最终返回)
2、should (只要符合其中一个条件就返回)
3、must_not (与must相反,也就是说可以有多个并列的查询条件,一个文档各个子条件后才最终的结果都不满足)
4、filter(条件过滤查询,过滤条件的范围用range表示gt表示大于、lt表示小于、gte表示大于等于、lte表示小于等于)
must和should同时使用should失效问题
原有查询方式:
查询条件
1 | (1)must |
1 | { "query": { "bool": { "must": [ { "range": { "date": { "from": 1657152000000, "to": 1657238400000, "boost": 1 } } } ], "should": [ { "term": { "oneid.keyword": { "value": [ "147172038204226244" ], "boost": 1 } } } ], "adjust_pure_negative": true, "boost": 1 } }} |
查询结果&问题:输出时并没有限制oneid字段值,说明should条件失效
原因:must和should并列组合条件时,参数minimum_should_match 默认为0 (即 should 的条件可以都不满足)。
解决
方式:将should条件放入must条件之中
1 | { "query": { "bool": { "must": [ { "range": { "date": { "from": 1657152000000, "to": 1657238400000, "include_lower": true, "include_upper": true, "boost": 1 } } }, { "bool": { "should": [ { "terms": { "oneid.keyword": [ "147164520153375584" ], "boost": 1 } } ], "adjust_pure_negative": true, "boost": 1 } } ], "adjust_pure_negative": true, "boost": 1 } }} |
查询结果:should条件已生效。