【问题标题】:How to define DSL query with combinations of AND & OR logic(OR logic inside AND)?如何使用 AND & OR 逻辑(AND 内的 OR 逻辑)的组合定义 DSL 查询?
【发布时间】:2019-05-02 08:07:12
【问题描述】:

我想定义一个 DSL 查询,在下面描述 Lucene 中的查询:

q = role:(admin OR manager) AND priority:(high OR middle).

我知道我可以使用should 来表示OR 逻辑,但是,下面的DSL 查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "role": "admin"
          }
        },
        {
          "match": {
            "role": "manager"
          }
        },
        {
          "match": {
            "priority": "high"
          }
        },
        {
          "match": {
            "priority": "middle"
          }
        }
      ],
      "minimum_should_match": "2"
    }
  }
}

无法达到我需要的,因为数据

{
  "role": [ "admin", "manager"],
  "priority": "low"
}

会被认为是有效的,但它不是。

如何修复我的 DSL 查询?我正在使用 ElasticSearch 5.2.2,谢谢!

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl


    【解决方案1】:

    你需要这样做:

    {
      "query": {
        "bool": {
          "filter": [
            {
              "bool": {
                "minimum_should_match": "1",
                "should": [
                  {
                    "match": {
                      "role": "admin"
                    }
                  },
                  {
                    "match": {
                      "role": "manager"
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "minimum_should_match": "1",
                "should": [
                  {
                    "match": {
                      "priority": "high"
                    }
                  },
                  {
                    "match": {
                      "priority": "middle"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 酷,很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多