ES must、filter、should一起使用,导致的should语句失效

当使用should查询时,如果包含了must或者filter查询,那么should的查询语句就不是或者【OR】的意思了,而是有或者没有都行的含义。

filter和should语句组合查询,会导致should语句失效

GET zx_album/album/_search
{
   "query": {
      "bool": {
         "filter": [
            {
               "term": {
                  "userId": {
                     "value": "115102970493227008",
                     "boost": 1
                  }
               }
            },
            {
               "term": {
                  "status": {
                     "value": "0",
                     "boost": 1
                  }
               }
            }
         ],
         "should": [
            {
               "term": {
                  "moveType": {
                     "value": 7,
                     "boost": 1
                  }
               }
            },
            {
               "term": {
                  "moveType": {
                     "value": 2,
                     "boost": 1
                  }
               }
            }
         ],
         "disable_coord": false,
         "adjust_pure_negative": true,
         "boost": 1
      }
   }
}

查询的数据不对,因为should没有被正确执行。

解决方案一:加上"minimum_number_should_match": 1 这个设置should语句的满足条件值。

解决方案二:将should嵌在must语句中。

GET zx_album/album/_search
{"query": {
  "bool" : {
    "filter" : [
      {
        "term" : {
          "userId" : {
            "value" : "115102970493227008"
          }
        }
      },
      {
        "term" : {
          "status" : {
            "value" : "0"
          }
        }
      },
      {
        "bool" : {
          "should" : [
            {
              "term" : {
                "moveType" : {
                  "value" : 7
                }
              }
            },
            {
              "term" : {
                "moveType" : {
                  "value" : 2
                }
              }
            }
          ]
        }
      }
    ]
  }}
}

must语句和filter一样的做法

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值