代码之家  ›  专栏  ›  技术社区  ›  blue-sky

使用与或在弹性开发工具查询弹性

  •  0
  • blue-sky  · 技术社区  · 4 年前

    if `ts` is greater than or equal to "2021-05-01T04:00:00Z" and less than "2021-10-01T04:00:00Z"
    AND
    the field data.data1 exists
    OR
    the field data.data2 exists
    OR
    the field data.data3 exists
    OR
    the field data.data4 exists
    

    get_test

    以下是我正在使用的查询:

    GET /get_test/_count
    {
      "query":{
        "bool": {
          "must": [
            {"range": {"ts": {"gte": "2021-05-01T04:00:00Z", "lt": "2021-10-01T04:00:00Z"}}},
            {"exists": {"field": "data.data1"}},
            {"exists": {"field": "data.data2"}},
            {"exists": {"field": "data.data4"}},
            {"exists": {"field": "data.data3"}}
          ]
          
        }
      }
    }
    

    此查询在弹性开发工具中执行,但返回0个结果,但存在与上述逻辑匹配的记录。似乎在每次调用之间都存在一个隐式AND:

        {"exists": {"field": "data.data1"}},
        {"exists": {"field": "data.data2"}},
        {"exists": {"field": "data.data4"}},
        {"exists": {"field": "data.data3"}}
    

    OR

    0 回复  |  直到 4 年前
        1
  •  2
  •   Tan Vu    4 年前

    如果你有场地 data 类型 nested ,您必须在 嵌套

    {
        "query": {
            "bool": {
                "must": [
                    {
                        "range": {
                            "ts": {
                                "gte": "2021-05-01T04:00:00Z",
                                "lt": "2021-10-01T04:00:00Z"
                            }
                        }
                    },
                    {
                        "nested": {
                            "path": "data",
                            "query": {
                                "should": [
                                    {
                                        "exists": {
                                            "field": "data.data1"
                                        }
                                    },
                                    {
                                        "exists": {
                                            "field": "data.data2"
                                        }
                                    },
                                    {
                                        "exists": {
                                            "field": "data.data4"
                                        }
                                    },
                                    {
                                        "exists": {
                                            "field": "data.data3"
                                        }
                                    }
                                ]
                            }
                        }
                    }
                ]
            }
        }
    }
    

    请注意,在 should must OR )