elasticsearch必须查询组合OR?

时间:2017-06-05 08:13:49

标签: elasticsearch

我一直在尝试使用必须查询bool,但我没有得到结果。

在伪SQL中:

SELECT * FROM info WHERE (ulevel= '1.3.10' or ulevel= '1.3.6') AND (@timestamp between '2017-06-05T07:00:00.000Z' and '2017-06-05T07:00:00.000Z')

这就是我所拥有的:

"query": {
    "bool": {
        "must": [
            {
                 "query_string": {
                        "default_field": "_all",
                        "query": "*"
                                    },
                 "range": {
                         "@timestamp": {
                               "from": "2017-06-05T07:00:00.000Z",
                               "to": "2017-06-05T07:20:00.000Z"
                                        }
                     },
                "bool": {
                    "should": [
                        {"term": { "ulevel": "1.3.10"}},
                         {"term": { "ulevel": "1.3.6"}}
                             ]
                       }
            }
        ]
    }
  }

有没有人有解决方案?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

您可以对第一部分使用terms查询,对第二部分使用范围查询

GET _search
{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "ulevel": [
              "1.3.10",
              "1.3.6"
            ]
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "2017-06-05T07:00:00.000Z",
              "lte": "2017-06-05T07:20:00.000Z"
            }
          }
        }
      ]
    }
  },
  "from": 0,
  "size": 20
}
  

一些注释:

     
      
  1. 过滤包含与任何提供的字词匹配的字段的文档(未分析
  2.   
  3. 此外,你可以使用一些日期特殊配方与愤怒过滤器。请查看范围查询页面https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html#ranges-on-dates了解更多信息。
  4.   

更新

为评论问题添加了fromsize