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

使用rest客户端的Elasticsearch批量插入

姚麒
2023-03-14

为了提高性能,我想批量向Elasticsearch发送文档,而不是逐个发送。我在上读过弹性批量APIhttps://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk.html

但是,我使用的是Elasticsearch rest客户端(https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html)并且找不到任何关于如何进行批量插入的示例或文档。我所能找到的只是通过传输客户端的批量请求。

我想我必须准备请求体,如这里所述(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html),并将其传递给restClient的performRequest方法?有没有其他方法,例如,ES java rest客户端库中的构建器机制,使用rest进行批量插入?

共有2个答案

逄征
2023-03-14

除Val答案外的另一个示例:http://web.archive.org/web/20180813044955/http://cscengineer.net/2016/10/22/elastic-搜索批量api/

只需使用POST而不是PUT(在使用rest模板时要小心. Exchange)

夏昌胤
2023-03-14

是的,这是正确的,现在REST客户端只允许向ES发送原始REST查询,但不太复杂。弹性正在开发一个高级客户端,它将在REST客户端之上工作,允许您发送DSL查询等。

现在,您可以使用以下示例代码将文档批量发送到ES服务器:

RestClient client = ...;
String actionMetaData = String.format("{ \"index\" : { \"_index\" : \"%s\", \"_type\" : \"%s\" } }%n", index, type);

List<String> bulkData = ...; // a list of your documents in JSON strings    
StringBuilder bulkRequestBody = new StringBuilder();
for (String bulkItem : bulkData) {
    bulkRequestBody.append(actionMetaData);
    bulkRequestBody.append(bulkItem);
    bulkRequestBody.append("\n");
}
HttpEntity entity = new NStringEntity(bulkRequestBody.toString(), ContentType.APPLICATION_JSON);
try {
    Response response = client.performRequest("POST", "/your_index/your_type/_bulk", Collections.emptyMap(), entity);
    return response.getStatusLine().getStatusCode() == HttpStatus.SC_OK;
} catch (Exception e) {
    // do something
}
 类似资料:
  • 我正在使用Java Rest客户端进行弹性搜索https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html但找不到批量插入或更新的方法。如何与该客户进行批量操作?

  • 我正在寻找一个JMX客户端,它可以从批处理文件中调用mbean操作。实际上,cron作业应该通过Weblogic服务器中的JMX调用操作。 不幸的是,VisualVM在批处理模式下无法工作(或者它可以吗?)。 那么,您使用什么作为JmX批处理客户端? 有人试过吗http://wiki.cyclopsgroup.org/jmxterm ? 我找不到它的驾照 什么是最好的或最常用的JMX控制台/客户端

  • 我正在使用Spring boot和AWS elasticsearch服务。AWS Elasticsearch服务,仅提供REST接口。 Elasticsearch Rest客户端在这里。 简单地说,是否可以将REST客户端与Spring Data Elasticsearch一起使用? 换句话说,Spring Data Elasticsearch是否与Elasticsearch Rest客户端配合使

  • 问题内容: 我需要通过REST API的Batch端点将大量节点及其之间的关系插入到Neo4j中,大约每秒5k记录(仍在增加)。 这将是24x7连续插入。每条记录可能只需要创建一个节点,而其他记录可能需要两个节点并创建一个关系。 是否可以通过更改程序或修改Neo4j的设置来提高插入件的性能? 到目前为止,我的进度: 1.我已经使用Neo4j进行了一段时间的测试,但无法获得所需的性能 测试服务器盒:

  • 我得到以下异常,而试图使用Elasticsearch高Rest客户端。 我使用的是Spring Boot 2.0.4和Elasticsearch 6.4版本。。用例只是用一些数据创建一个索引,然后检索相同的数据。。 我刚刚遵循了elasticsearch文档中的依赖项,并正确地进行了设置。 我对Gradle的依赖是 为了简单起见,给出了代码的简短版本。。 有人能帮忙吗?

  • 我正在尝试从ElasticSearch 2过渡到5或6。我想我想直接跳到6.1.1并使用RestHighLevelClient,因为它比低级rest客户端更接近我正在使用的现有传输客户端。 但是,我遇到了一个问题作为集成测试的一部分,我正在创建索引并插入特定数据,因此我知道我的查询是正确的。我似乎无法在High Level客户端中做到这一点。特别是,我希望能够调用: 但是,client.indic