当前位置: 首页 > 知识库问答 >
问题:

ElasticSearch使用RestHighLevelClient批量插入gies错误

乔丁雨
2023-03-14

使用RestHighLevelRestClient使用ElasticSearch批量插入时出现异常。

ElasticsearchStatusException[无法解析响应体];html" target="_blank">嵌套:ResponseException[method[POST],host[http:x.com],URI[/_bulk?timeout=1m],状态行[http/1.1 413请求实体太大]{“消息”:“请求大小超过104857600字节”};在org。弹性搜索。客户RestHighLevelClient。org上的parseResponseException(RestHighLevelClient.java:1386)。弹性搜索。客户RestHighLevelClient 1美元。org上的onFailure(RestHighLevelClient.java:1357)。弹性搜索。客户RestClient$FailureTrackingResponseListener。org上的onDefinitiveFailure(RestClient.java:844)。弹性搜索。客户1美元。已在org上完成(RestClient.java:548)。弹性搜索。客户1美元。已在org上完成(RestClient.java:529)。阿帕奇。http。同时发生的基本未来。已在org上完成(BasicFuture.java:122)。阿帕奇。http。impl。尼奥。客户DefaultClientExchangeHandlerImpl。responseCompleted(DefaultClientExchangeHandlerImpl.java:181)位于org。阿帕奇。http。尼奥。协议HttpAsyncRequestExecutor。processResponse(HttpAsyncRequestExecutor.java:448)位于org。阿帕奇。http。尼奥。协议HttpAsyncRequestExecutor。org上的inputReady(HttpAsyncRequestExecutor.java:338)。阿帕奇。http。impl。尼奥。DefaultNHttpClientConnection。consumeInput(DefaultNHttpClientConnection.java:265)位于org。阿帕奇。http。impl。尼奥。客户斯帕奇。onInputReady(internaliodiispatch.java:81)位于org。阿帕奇。http。impl。尼奥。客户斯帕奇。onInputReady(internaliodiispatch.java:39)位于org。阿帕奇。http。impl。尼奥。核Reactor我是斯帕奇。inputReady(abstractioidispatch.java:114)位于org。阿帕奇。http。impl。尼奥。核Reactor基本反应器。可在org上阅读(BaseIOReactor.java:162)。阿帕奇。http。impl。尼奥。核Reactor抽象反应器。processEvent(AbstractIOReactor.java:337)位于org。阿帕奇。http。impl。尼奥。核Reactor抽象反应器。org上的processEvents(AbstractIOReactor.java:315)。阿帕奇。http。impl。尼奥。核Reactor抽象反应器。在org上执行(AbstractIOReactor.java:276)。阿帕奇。http。impl。尼奥。核Reactor基本反应器。在org上执行(BaseIOReactor.java:104)。阿帕奇。http。impl。尼奥。核ReactorAbstractMultiWorker$Worker。在java上运行(AbstractMultiworkerIOReactor.java:591)。朗。丝线。运行(未知源)被抑制:ParsingException[未能分析对象:应为名为[error]的字段,但在组织中找到[Message]]。弹性搜索。常见的非常重要。XContentParserUtils。ensureFieldName(XContentParserUtils.java:50)位于org。弹性搜索。弹性搜索例外。org上的failureFromXContent(ElasticsearchException.java:605)。弹性搜索。RestBytesResponse。org上的errorFromXContent(BytesRestResponse.java:169)。弹性搜索。客户RestHighLevelClient。org上的parseEntity(RestHighLevelClient.java:1406)。弹性搜索。客户RestHighLevelClient。parseResponseException(RestHighLevelClient.java:1382)。。。还有19个

我在SO post上搜索了一下,发现有些人建议设置http。最大内容长度,但我无法解决这个问题。下面是我保存数据的代码-

private void saveAll(BulkRequest bulkRequest, String indexName)
    {
        try {
            System.out.println("***Saving data into " + indexName + " of Size = " + bulkRequest.numberOfActions());
            // restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);

             Builder builder = RequestOptions.DEFAULT.toBuilder();
             builder.addHeader("http.max_content_length", "500mb");

             RequestOptions requestOptions = builder.build();

            restHighLevelClient.bulkAsync(bulkRequest,requestOptions , new ActionListener<BulkResponse>()
            {

                @Override
                public void onResponse(BulkResponse response)
                {
                    System.out.println("Bulk Data sucessfully Saved in " + indexName + " ElasticIndex***");

                }

                @Override
                public void onFailure(Exception e)
                {
                    System.out.println("Issue in bulk data saving in " + indexName + " ElasticIndex***");
                    e.printStackTrace();

                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

共有1个答案

姜阳
2023-03-14

我已经通过减少请求的大小解决了这个问题。您可以在下面的代码中看到,如果dataModelList size id大于10000,那么我将该列表拆分为5000个数据,然后保存到Elastic中。希望它能帮助别人。

 if (dataModelList.size() > 10000) {
            List<List<BaseDataModel>> baseDataModels = Lists.partition(dataModelList, 5000);
            baseDataModels.stream().forEach(baseModels -> {
                BulkRequest bulkRequest = new BulkRequest();
                baseModels.stream().forEach(baseModel -> {
                    bulkRequest.add(getBaseDataModelIndexRequest(baseModel));
                });
                saveAll(bulkRequest, rawEventIndex);
            });
        }
 类似资料:
  • 问题内容: 我正在尝试使用Nest将多个记录插入数据库。使用IndexMany类插入确实可以,但是我还需要通过json字符串插入对象。 我确实在github上进行了查找,并找到了一些如何使用RAWclient的示例。在代码示例下面,我插入json。 一些其他信息: jsondata: var twitter: 我从数据库收到的结果: 有人知道这个问题可能是什么吗?还是我在json /代码中丢失了什

  • 为了提高性能,我想批量向Elasticsearch发送文档,而不是逐个发送。我在上读过弹性批量APIhttps://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk.html 但是,我使用的是Elasticsearch rest客户端(https://www.elastic.co/guide/e

  • 问题内容: 我不确定是否在批量索引编制中正确使用了该操作。 我的要求是: 网址是: 我想我错过了文档中的某些内容,但仍然找不到如何进行此操作的方法。 我想要 在索引中创建以上文档,或者如果存在则对其进行更新。 问题答案: 如果您通过批量API将索引中的记录添加为 那么如果该ID已经存在于索引中,您将获得一个异常。如果要添加或 替换 文档(取决于文档是否存在),则应按以下方式进行请求 如果已经存在具

  • 我正在为弹性搜索中的RestHighLevelClient使用以下代码。 但我遇到以下异常 注意:上面的代码适用于较小大小的请求,但在发布较大大小的请求时会出现上述错误。请建议。

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出

  • 问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量