【问题标题】:Elasticsearch multi date range aggregation using java api使用 java api 的 Elasticsearch 多日期范围聚合
【发布时间】:2016-04-02 15:57:01
【问题描述】:

我使用 elasticsearch 2.2,我想做一些这样的聚合:

{  
   "bool":{  
      "must":[  
         {  
            "query_string":{  
               "default_field":"berid",
               "query":"F600-HHP1"
            }
         },
         {  
            "query_string":{  
               "default_field":"matnr",
               "query":"91P9289AAZZ"
            }
            }
         ]

   },
   "size":0,
   "aggs":{  
      "count_by_date_range":{  
         "date_range":{  
            "field":"zzupload",
            "ranges":[  
               {  
                  "from":"2016-03-01",
                  "to":"2016-03-06"
               },
               {  
                  "from":"2016-03-07",
                  "to":"2016-03-13"
               },
               {  
                  "from":"2016-03-14",
                  "to":"2016-03-20"
               },
               {  
                  "from":"2016-03-21",
                  "to":"2016-03-27"
               },
               {  
                  "from":"2016-03-28",
                  "to":"2016-04-03"
               },
               {  
                  "from":"2016-04-04",
                  "to":"2016-04-10"
               },
               {  
                  "from":"2016-04-11",
                  "to":"2016-04-17"
               },
               {  
                  "from":"2016-04-18",
                  "to":"2016-04-24"
               },
               {  
                  "from":"2016-04-25",
                  "to":"2016-05-01"
               },
               {  
                  "from":"2016-05-02",
                  "to":"2016-05-08"
               },
               {  
                  "from":"2016-05-09",
                  "to":"2016-05-15"
               },
               {  
                  "from":"2016-05-16",
                  "to":"2016-05-22"
               },
               {  
                  "from":"2016-05-23",
                  "to":"2016-05-29"
               },
               {  
                  "from":"2016-05-30",
                  "to":"2016-06-05"
               },
               {  
                  "from":"2016-06-06",
                  "to":"2016-06-12"
               },
               {  
                  "from":"2016-06-13",
                  "to":"2016-06-19"
               }
            ]
         },
         "aggs":{  
            "total_fcst_qty":{  
               "sum":{  
                  "field":"zzamqtu"
               }
            }
         }
      }
   }
}

我需要计算日期范围内的数量总和(“from”:“2016-03-01”,“to”:“2016-03-06”,...)。但它看起来像 elasticsearch java api 不支持多日期范围。这是我的代码:

        SearchRequestBuilder searchBuilder = esClient.prepareSearch(Elasticsearch_sap_material_fcst_Index)
        .setTypes(Elasticsearch_material_fcst_Type)
        .setQuery(sb.toString())
        .addAggregation(AggregationBuilders.dateRange("count_by_date_range").field("zzupload")
                .addRange("2016-03-01", "2016-03-06")
                .subAggregation(AggregationBuilders.sum("total_fcst_qty")));

如何使用 java api 计算多个日期范围? 谢谢

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以像使用 REST API 一样添加多个范围:

    SearchRequestBuilder searchBuilder = esClient.prepareSearch(Elasticsearch_sap_material_fcst_Index)
            .setTypes(Elasticsearch_material_fcst_Type)
            .setQuery(sb.toString())
            .addAggregation(AggregationBuilders.dateRange("count_by_date_range").field("zzupload")
                    .addRange("2016-03-01", "2016-03-06")
                    .addRange("2016-05-23", "2016-05-29")
            .subAggregation(AggregationBuilders.sum("total_fcst_qty")));
    

    如果您查看source code,您会发现每次调用 addRange 都会将新范围附加到范围列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2016-02-12
      • 2018-09-02
      相关资源
      最近更新 更多