ES多条件查询must和should不能同时生效问题

1、前言

        must 

              所有的语句都 必须(must) 匹配,与 AND 等价。 

       must_not 

              所有的语句都 不能(must not) 匹配,与 NOT 等价。 

       should 

              至少有一个语句要匹配,与 OR 等价

2、正常的should查询

3、正常的must查询

4、must和should组合查询,should失效

4.1、原始数据

4.2、组合查询结果(只有must生效,should不生效,并不是正常理解,先满足must然后在must的基础上进行should查询)

5、转换成复杂的组合查询,就是满足一定的条件下,在满足条件1或者满足条件2或者满足条件3

{
	"query": {
		"bool": {
			"must": [{
			  // 先满足前置条件
				"bool": {
					"must": [{
						"term": {
							"dynamicType.keyword": "201"
						}
					}, {
						"prefix": {
							"viewTime.keyword": "2019-10-11"
						}
					}]
				}
			}, {
			  // 在满足后置条件
				"bool": {
					"should": [{
						"term": {
							"uniqueKey.keyword": "3a91b0abd3507ee8b7165e710382a411"
						}
					}, {
						"term": {
							"uniqueKey.keyword": "e5a359bcff112a98a6f7ea968d00ae3a"
						}
					}, {
						"term": {
							"uniqueKey.keyword": "0fb98f5dd7f86ff7d3f7c105d27cddb0"
						}
					}, {
						"term": {
							"uniqueKey.keyword": "ccc0a51553fc33e7c19bb822f8ff6048"
						}
					}]
				}
			}]
		}
	},
	"from": 0,
	"size": 10,
	"sort": [{
		"viewTime.keyword": {
			"order": "desc"
		}
	}],
	"aggs": {}
}

6、总结

        es做多条件复杂查询时,要先分析具体的查询场景,尽可能的拆分成数学公式的样子去分解查询步骤,然后在组合查询的json参数

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值