【问题标题】:Elasticsearch Date Histogram Aggregation over a Nested Array嵌套数组上的 Elasticsearch 日期直方图聚合
【发布时间】:2015-01-30 15:50:33
【问题描述】:

以下是我的 elasticsearch 索引中的几个示例文档:

{
  message: "M1",
  date: "date object",
  comments: [
    {
     "msg" :"good"
     date:"date_obj1"
   },
   {
    "msg" :"bad"
     date:"date_obj2"
   },
   {
    "msg" :"ugly"
     date:"date_obj3"
   }
  ]
}

{
  message: "M2",
  date: "date_object5",
  comments: [
    {
     "msg" :"ugly"
     date:"date_obj7"
    },
    {
     "msg" :"pagli"
     date:"date_obj8"
    }
  ]
}

现在我需要查找每天的文档数量和每天的 cmets 数量。 我可以通过使用日期直方图获得每天的文档数量,它给了我正确的结果。我进行以下聚合查询

aggs : {
    "posts_over_days" : {
        "date_histogram" : { "field" : "date", "interval": "day" }
         }
    }

但是当我尝试类似的事情来每天获取 cmets 时,它返回的数据不正确,(对于 1500+ cmets,它只会返回 160 个奇数 cmets)。我正在做以下查询:

aggs : {
    "comments_over_days" : {
        "date_histogram" : { "field" : "comments.date", "interval": "day" }
         }
    }

我想知道如何获得想要的结果? elasticsearch有没有办法得到我想要的? 如果我需要提供任何其他信息,请告诉我。

预期输出:

buckets: [
 {
   time_interval: date_objectA,
   doc_count: x
 },
  {
   time_interval: date_objectB,
   doc_count: y
 }
]

【问题讨论】:

    标签: elasticsearch elasticsearch-plugin elasticsearch-jdbc-river spring-data-elasticsearch pyelasticsearch


    【解决方案1】:

    使用Value Count 聚合 - 这将计算文档中字段的术语数。例如。根据您的数据(2 个文档中的 5 个 cmets):

    curl -XGET 'http://localhost:9200/myindex/mydata/_search?search_type=count&pretty' -d '{
    >    "aggs" : {
    >         "grades_count" : { "value_count" : { "field" : "comments.date" } }
    >     }
    > }'
    {
      "took" : 2,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      },
      "hits" : {
        "total" : 2,
        "max_score" : 0.0,
        "hits" : [ ]
       },
       "aggregations" : {
        "grades_count" : {
         "value" : 5
        }
      }
    }
    

    添加日期桶

    Value Count 聚合可以嵌套在日期桶中:

    curl -XGET 'http://localhost:9200/myindex/mydata/_search?search_type=count&pretty' -d '{
      aggs : {
       "posts_over_days" : {
         "date_histogram" : { "field" : "date", "interval": "day" },
         "aggs" : {
             "grades_count" : { "value_count" : { "field" : "comments.date" } }
           }
         }
      }
    }'
    

    结果:

      "aggregations" : {
        "posts_over_days" : {
         "buckets" : [ {
            "key_as_string" : "2014-11-27T00:00:00.000Z",
            "key" : 1417046400000,
            "doc_count" : 1,
            "grades_count" : {
              "value" : 2
            }
          }, {
            "key_as_string" : "2014-11-28T00:00:00.000Z",
            "key" : 1417132800000,
            "doc_count" : 1,
            "grades_count" : {
              "value" : 3
            }
          } 
    

    【讨论】:

      猜你喜欢
      • 2022-07-13
      • 1970-01-01
      • 2018-01-12
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多