代码之家  ›  专栏  ›  技术社区  ›  darren

elasticsearch过滤器/查询中的多个布尔子句

  •  1
  • darren  · 技术社区  · 8 年前

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

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

    如何生成具有多个布尔过滤器的查询?(额外的好处是展示如何在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 回复  |  直到 8 年前
        1
  •  3
  •   Andrei Stefan    8 年前
    {
      "query": {
        "bool": {
          "should": [
            {
              "bool": {
                "must": [
                  {
                    "term": {
                      "id": 99
                    }
                  },
                  {
                    "term": {
                      "isonline": false
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "must": [
                  {
                    "term": {
                      "id": 98
                    }
                  },
                  {
                    "term": {
                      "isonline": true
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }