2016-01-19 3 views
2

Мой код имеет запрос и агрегаты ElasticSearch в формате JSON и хочет вызвать API-интерфейс ElasticSearch.Как использовать API-интерфейс ElasticSearch для создания агрегации из JSON

Для части запроса, я могу использовать WrapperQuery построить запрос из JSON в качестве так:

val query = Json.obj(
    "query_string" -> Json.obj("query" -> "*")) 

val aggs = Json.obj(
    "gender" -> Json.obj("terms" -> Json.obj("field": "gender")), 
    "age" -> Json.obj("terms" -> Json.obj("field": "age"))) 

val aggsRequestBuilder = new SearchRequestBuilder(client) 
    .setIndices(index()) 
    .setQuery(QueryBuilders.wrapperQuery(query.toString()) 
    .addAggregation(AggregationBuilders.???(aggs.toString()) 

Но тогда, у меня также есть JSON для агрегатов, и я не вижу AggregationsBuilder. wrapperAggregation(), которую я могу использовать для создания объекта агрегации из JSON.

Я что-то упустил?

ответ

4

Я обнаружил ответ, недокументированный. Байт [] перегрузки setAggregations() будет принимать JSON. Надеюсь, это полезно для других.

val aggsRequestBuilder = new SearchRequestBuilder(client) 
    .setIndices(index()) 
    .setQuery(QueryBuilders.wrapperQuery(query.toString()) 
    .setAggregations(agg.toString().getBytes())