Here is what I have:
I have an index in elasticseach storing thousands of documents. Each document includes a field called 'deviceName'.
Here is what I would like to do with java api:
I want to get all devices stored in my index and their occurence (number of time a device appears in this index).
Here is my java code:
String indexVector = new String; indexVector = "myIndex"; String  values = new String; values = "sum_delta"; values = "count_frames"; String  totalPercentage = new String; totalPercentage = "devices>per_percentage"; SearchResponse response = (SearchResponse) client.prepareSearch(indexVector) .setSize(10000) .addAggregation(AggregationBuilders.terms("devices").field("deviceName") .size(100) .subAggregation(AggregationBuilders.sum("sum_delta").field("delta")) .subAggregation(AggregationBuilders.count("count_frames").field("cnt")) .subAggregation(PipelineAggregatorBuilders.bucketScript("per_percentage") .setBucketsPaths(values) .script(new Script("_value0 / (_value0 + _value1 + 1)")) ) ) .addAggregation(PipelineAggregatorBuilders.avgBucket("avg_per_all_devices") .setBucketsPaths(totalPercentage) ) .execute() .actionGet();
How I search in Kibana:
Here is my results:
With java API I get 63 devices and with kibana 64 devices. However, the biggest problem for me is the occurence. Indeed, for a device that has a occurence lower than 30, i have the same result with Java api and Kibana. But, when the occurence is larger, kibana returns a occurence greater than the one returned by java API. Example: kibana returns 1010 and in the same time java api returns 880.
I really don't understand why there is so much difference.
So, please, can you tell me what is wrong in my code and what I have to do ?
Thank you for your attention and your help.