Ответ агрегации не может быть прочитан 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,

Есть идеи?

0 ответов

Другие вопросы по тегам