ES java client 搜索报错 entity content is too long[xxx1] for the configured buffer limit [xxx2]

         应用同事反馈,在使用es的滚动导出的时候,一共有5567条数据,但是实际上只拿到4567条数据,并且打断点,最后一次是获取到了456条数据。

        所以可以判断,中间少了1000条数据。因为滚动导出是每次1000条。初步判断,是少了一次数据解析,有可能第一次构建请求的时候,没有解析数据。实际上并不是,看报错如下图,是 entity content is too long[xxx1] for the configured buffer limit [xxx2]
   

问题分析

    根据这个错误,判断这个是以内召回的数据,总大小超过了response这个对象能够承载的大小了。之间见过类似的错误。

解决方案一

    这里只需要构造一个RequestOptions对象,然后,调整大小。HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(10 * 104857600)

    代码示例。这里只贴了相关的代码。RequestOptions对象用在client.search()方法中。也就是给es发请求的前前一刻。

        RequestOptions.Builder options = RequestOptions.DEFAULT.toBuilder();
        options.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(10 * 104857600));
        final RequestOptions requestOptions = options.build();


        searchResponse = client.search(
                            searchRequest,
                            //ElasticClient.requestOptions(rc.getEsEntity().getUsername(), rc.getEsEntity().getPassword())
                            requestOptions
                    );

解决方案二

        上述的方案并不是最佳解决方案。以为很明显,这属于数据太大了。通过上述的方法 虽然能解决问题。还是很可能带来堆的问题。虽然上述是在滚动导出的时候遇到的,但是单次查询,假如召回的数太多也会遇到相同的问题。

        更好的解决方法,是控制单次请求召回的数据总数。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值