Ответ агрегации не может быть прочитан Java API ElasticSearch
Я пытаюсь смоделировать как SQL GROUP BY
в ElasticSearch с использованием агрегации терминов с субагрегацией самых популярных хитов. Но я получаю очень странное исключение при чтении ответа.
Это мой код агрегации:
AggregationBuilders.terms("groups")
.field(aggregatedExpandedSearchRequest.getGroupingField() + ".raw")
.size(Integer.MAX_VALUE)
.subAggregation(AggregationBuilders
.topHits("innerHits")
.size(Integer.MAX_VALUE)
.fetchSource(getIncludes(aggregatedExpandedSearchRequest), null)
);
Который генерирует следующий JSON
{
"size" : 0,
"_source" : false,
"aggregations" : {
"buckets" : {
"groups" : {
"field" : "city.raw",
"size" : 2147483647,
"min_doc_count" : 1,
"shard_min_doc_count" : 0,
"show_term_doc_count_error" : false,
"order" : [
{
"_count" : "desc"
},
{
"_term" : "asc"
}
]
},
"aggregations" : {
"innerHits" : {
"top_hits" : {
"from" : 0,
"size" : 2147483647,
"version" : false,
"explain" : false,
"_source" : {
"includes" : [
"name"
],
"excludes" : [ ]
}
}
}
}
}
}
}
Сгенерированный JSON возвращает правильный ответ при использовании внешнего HTTP-клиента и POST для _search URL.
Ответ об исключении из TransportClient
является
2017-12-15 17:43:20.667 WARN --- [ient_boss][T#5]] o.e.transport.netty4.Netty4Transport : exception caught on transport layer [[id: 0xaca25475, L:/127.0.0.1:52954 - R:localhost/127.0.0.1:32887]], closing connection
java.lang.IllegalStateException: Message not fully read (response) for requestId [7], handler [org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler/org.elasticsearch.action.ActionListenerResponseHandler@4fe0f861], error [false]; resetting
at org.elasticsearch.transport.TcpTransport.messageReceived(TcpTransport.java:1410)
at org.elasticsearch.transport.netty4.Netty4MessageChannelHandler.channelRead(Netty4MessageChannelHandler.java:74)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:297)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:413)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:644)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:544)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at java.lang.Thread.run(Thread.java:748)
Я смог найти эту причину
java.lang.IllegalArgumentException: Unknown NamedWriteable [org.elasticsearch.search.DocValueFormat][collate]
но до сих пор не могу понять, что я делаю не так.
Если я удаляю агрегацию (я не называю addAggregation), ответ читается правильно. На самом деле у меня есть много других рабочих функций (поиск, упорядочение,...), пока я не добавлю агрегацию.
И клиент, и серверы имеют одинаковую версию 5.5.0
,
Есть идеи?