【问题标题】:ElasticSearch how display all documents matching date range aggregationElasticSearch如何显示所有匹配日期范围聚合的文档
【发布时间】:2016-11-19 09:14:41
【问题描述】:

以下弹性文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-datehistogram-aggregation.html

问题:

如何进行日期范围聚合并显示与相关日期桶匹配的所有文档,而不是doc_count

聚合:

{
    "aggs" : {
        "articles_over_time" : {
            "date_histogram" : {
                "field" : "date",
                "interval" : "1M",
                "format" : "yyyy-MM-dd" 
            }
        }
    }
}

回复:

        {
            "aggregations": {
                "articles_over_time": {
                    "buckets": [
                        {
                            "key_as_string": "2013-02-02",
                            "key": 1328140800000,
                            "doc_count": 1
                        },
                        {
                            "key_as_string": "2013-03-02",
                            "key": 1330646400000,
                            "doc_count": 2  //how display whole json ??
                 
                    [ .. Here i want to display 
                           all document with array based 
                           NOT only doc_count:2.......... ]

                        },
                        ...
                    ]
                }
            }
        }

也许我需要做一些子聚合或其他事情?

有什么想法吗?

【问题讨论】:

    标签: elasticsearch aggregate aggregation elasticsearch-aggregation


    【解决方案1】:

    您必须在 date-histogram 聚合上执行 top_hits 子聚合。所有选项都可以从here读取。

    您的最终聚合将如下所示

    {
      "aggs": {
        "articles_over_time": {
          "date_histogram": {
            "field": "date",
            "interval": "1M",
            "format": "yyyy-MM-dd"
          },
          "aggs": {
            "documents": {
              "top_hits": {
                "size": 10
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      就像 Sumit 所说,但是,我认为您真正想要的是创建一个具有日期范围的过滤器:

      https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-range-query.html#ranges-on-dates

      这样您就可以过滤掉不在日期范围内的文档,只保留正确的文档。比你可以对结果做任何你想做的事情。

      【讨论】:

      • Jettro Coenradie:可以过滤让我能够将每个文档映射到它们的存储桶范围(例如 .. 第一个存储桶:[1/1/2016/00:00 - 1/1/2016/ 01:00]--> {[所有相关文件]..},...) 等?
      • 啊,如果您想拥有多个时间范围,那么您需要来自 Sumit 的热门回答。日期直方图与热门匹配。请注意,没有办法对热门歌曲进行分页。如果有很多文件,也不适合获取所有文件。
      • Jettro Coenradie: 哦..是的,这正是我的情况,每个存储桶上有一千个文档,我的最终目的是遍历存储桶中每个文档的一些字段并执行 JDBC(外部mysql db call) ,所以来自 db 的返回值将映射回文档..或新文档:)
      • 根据桶的数量或时间范围,我会考虑使用多个查询。创建热门匹配是为了创建存储桶并显示一些热门匹配。
      • 我有 24 个桶(每天每小时),每个桶上有数千个映射文档,所以您建议使用日期直方图聚合 + 多个查询吗?而不是“热门”(我必须遍历存储桶中的所有文档才能对每个文档进行数据库调用),是否可以使用弹性搜索聚合?也许使用像“map-reduce”这样的弹性脚本?
      猜你喜欢
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多