2014-09-26 3 views
0

Я делаю агрегацию макс на числовом поле в elasticsearch следующим образом:Доступ к результатам максимальной агрегации в elasticsearch

SearchResponse sr = client 
       .prepareSearch("test") 
       .setTypes("test") 
       .setQuery(QueryBuilders.matchAllQuery()) 
       .addAggregation(
         AggregationBuilders.max("id").field(
           "id")).execute().actionGet(); 

Как получить доступ к max.value вернулся в Java? Я мог бы видеть пример только для агрегирования терминов. Пожалуйста, помогите мне с этим. Благодарю.

ответ

1

Попробуйте следующий код,

import org.elasticsearch.search.aggregations.metrics.max.Max; 
import org.elasticsearch.search.aggregations.Aggregation; 

//process ES Response, it will iterate only once though 
// sr = searchResponse 
for (Aggregation maxAggs : sr.getAggregations()) { 
       Max max = (Max) maxAggs; 
       double maxValue = max.getValue(); 
       System.out.println("maxValue => " + maxValue); 
} 
+0

Я надеялся, что будет некоторый эффективный способ получить результаты без циклов. Большое спасибо за ваш ответ. Используйте это. –

+0

@RabiyaAshruff Я использую тот же api около года :) – prayagupd

0

Вы можете использовать JsonPath непосредственно получить значение агрегации. первый добавить JsonPath Maven зависимостей в проекте:

<dependency> 
    <groupId>com.jayway.jsonpath</groupId> 
    <artifactId>json-path</artifactId> 
    <version>0.9.1</version> 
</dependency> 

затем использовать ниже код, который будет возвращать строку:

JsonPath.read(sr.toString(), "$.aggregations.id.value") 

вы можете получить более подробную информацию о JSONPath от here

+0

Попробуем это тоже. Благодаря тонну!! :) –

Смежные вопросы