【问题标题】:Elastic Search Query Filter and Sort for Date弹性搜索查询过滤和排序日期
【发布时间】:2020-07-25 08:55:32
【问题描述】:

假设每天有 100 条(任意数量)记录每天在弹性中被索引,其中一个字段作为运行日期。现在,在查询弹性时,我们可以形成一个弹性查询,它会产生最新的 runDate 数据。

例如:

所有记录都在一个索引下。

{"runDate":"11:04:2020" .....} {"runDate":"11:04:2020" .....} .. * 100 条记录类似。

{"runDate":"12:04:2020"......} {"runDate":"12:04:2020"......} .. * 150 条记录类似。

查询应该返回。

{"runDate":"12:04:2020"......} {"runDate":"12:04:2020"......} .. * 150 条记录类似。

一个解决方案/两个基于查询。

  1. 通过应用排序和大小 = 1 获取最新日期(返回 12:04:2020)。
  2. 对第 1 步中的日期 (12:04:2020) 应用匹配查询。

我们可以在一个查询中做得更好吗?

感谢您的帮助!

【问题讨论】:

    标签: elasticsearch elastic-stack elasticsearch-query


    【解决方案1】:

    1.如果您知道可以使用单个查询的记录数。

    按运行日期排序并获取 n 条记录

    GET <indexname>/_search
    {
      "from": 0,
      "size": 3,  --> n records
      "sort": [
        {
          "runDate": {
            "order": "desc"
          }
        }
      ]
    }
    

    2。如果您尝试获取大于当前日期的记录

    GET <indexname>/_search
    {
      "query": {
        "range": {
          "runDate": {
            "gte": "now/d" --> now-1d/d from yesterday, other calculations are available
          }
        }
      }, 
      "from": 0,
      "size": 3, 
      "sort": [
        {
          "runDate": {
            "order": "desc"
          }
        }
      ]
    }
    

    3.获取最大日期并使用它来查询该日期

    {
      "size": 0, 
      "aggs": {
        "max_date": {
          "max": {
            "field": "runDate"
          }
        }
      }
    }
    

    【讨论】:

    • 1.将是一个任意数字,因此无法这样做。 2. 我们在这里也需要大小,否则它会返回 2-3 天的响应,然后我们也需要隔离。 3.我们将使用两个查询方法。
    • 第三个我们可以在 maxDate 的基础上做一些过滤吗?
    • 您需要输入一些日期。这将需要两个查询,或者您需要更改索引。每个日期创建一个文档(嵌套)
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多