elasticsearch过滤/查询中的多个bool子句

时间:2017-10-30 11:02:43

标签: elasticsearch nest

我应该如何将此SQL查询转换为elasticsearch查询?

SELECT * FROM myTable WHERE (id = 99 AND isonline <> 1) OR (id = 98 AND isonline <> 0)

如何进行具有多个bool过滤器的查询? (奖金也将显示如何在NEST中完成)

我提出的弹性查询不起作用,因为它包含重复的对象键。

{
    "size": 1000,
    "query": {
        "match_all": {}
    },
    "filter": {
        "bool": {
            "must": [
                {
                    "term": {
                        "id": 99
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "isonline": true
                    }
                }
            ]
        },
        "bool": {
            "must": [
                {
                    "term": {
                        "id": 98
                    }
                }
            ],
            "must_not": [
                {
                    "term": {
                        "isonline": false
                    }
                }
            ]
        }        
    }
}

elasticsearch 1.7版

1 个答案:

答案 0 :(得分:0)

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "id": 99
                }
              },
              {
                "term": {
                  "isonline": false
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "term": {
                  "id": 98
                }
              },
              {
                "term": {
                  "isonline": true
                }
              }
            ]
          }
        }
      ]
    }
  }
}