ElasticSearch如何显示匹配日期范围聚合的所有文档

时间:2016-07-16 06:08:47

标签: elasticsearch aggregate aggregation elasticsearch-aggregation

以下弹性文档: 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.......... ]

                        },
                        ...
                    ]
                }
            }
        }

也许我需要做一些子聚合或其他什么?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

您的最终聚合将如下所示

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

答案 1 :(得分:0)

与Sumit所说的一样,我认为你真正想要的是创建一个具有日期范围的过滤器:

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

这样您就可以过滤掉不在日期范围内的文档,只保留正确的文档。你可以用结果做你想做的一切。