【问题标题】:Elasticsearch count in groups by date range按日期范围分组的 Elasticsearch 计数
【发布时间】:2017-12-22 08:59:12
【问题描述】:

我有这样的文件:

{
body: 'some text',
read_date: '2017-12-22T10:19:40.223000'
}

有没有办法按日期查询最近 10 天发布的文档数?例如:

2017-12-22, 150  
2017-12-21, 79  
2017-12-20, 111  
2017-12-19, 27  
2017-12-18, 100  

【问题讨论】:

  • 专业提示:您在此处提出的一些 Elasticsearch 问题似乎在研究中没有太大意义。这可能是帮助者不介意提供免费劳动力的标签,但值得注意的是,在整个 Stack Overflow 上,事先的努力有很长的路要走。深受读者好评,可能会鼓励更多人帮助您。

标签: elasticsearch elasticsearch-5


【解决方案1】:

是的,您可以使用 date_histogram 聚合轻松实现这一点,如下所示:

{
  "query": {
    "range": {
      "read_date": {
        "gte": "now-10d"
      }
    }
  },
  "aggs": {
    "byday": {
      "date_histogram": {
        "field": "read_date",
        "interval": "day"
      }
    }
  }
}

【讨论】:

  • 一个错误说:无法解析设置 [DateHistogramAggregationBuilder.interval] 值 [day] 作为时间值
  • 抱歉,里面有空格,我删除了,现在应该可以使用了
  • 我不敢相信这就像小菜一碟!
  • 太棒了,很高兴它有帮助!
【解决方案2】:

要接收过去 10 天的天数,您可以每天发布以下查询:

{
  "query": {
    "range": {
      "read_date": {
        "gte": "now-11d/d",
        "lte": "now-1d/d"
      }
    }
  },

    "aggs" : {
        "byDay" : {
            "date_histogram" : {
                "field" : "read_date",
                "calendar_interval" : "1d",
                "format" : "yyyy-MM-dd" 
            }
        }
    }
}

到以下网址:http://localhost:9200/Index_Name/Index_Type/_search?size=0

将 size 设置为 0 可避免执行搜索的 fetch 阶段,从而提高请求的效率。请参阅this elastic documentation 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 2021-11-16
    • 2021-03-05
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多