1

I use elasticsearch 2.2 and I want to do some aggregations like this:

{  
   "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"
               }
            }
         }
      }
   }
}

I need to calculate the sum of quantity on date range("from":"2016-03-01", "to":"2016-03-06", ...).But it's look like elasticsearch java api didn't support multi date_range.Here is my code:

        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")));

How to calculate multiple date range using java api? Thanks

1 Answer 1

0

You can just add multiple ranges like you did with the 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")));

If you have a look at the source code, you can see that each call to addRange appends the new range to a list of ranges.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.