【问题标题】:Elasticsearch bulk insert using rest client使用休息客户端的 Elasticsearch 批量插入
【发布时间】:2017-09-06 10:32:00
【问题描述】:

为了提高性能,我想将文档批量发送到 Elasticsearch,而不是一个一个地发送。我在https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-bulk.html

阅读了有关弹性批量 API 的信息

但是,我使用的是 Elasticsearch rest-client (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-client 库中的构建器机制,使用 rest 进行批量插入?

【问题讨论】:

    标签: java rest elasticsearch


    【解决方案1】:

    是的,没错,目前 REST 客户端只允许向 ES 发送原始 REST 查询,但没有什么太复杂的功能。 Elastic 正在开发一个高级客户端,该客户端将在 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
    }
    

    【讨论】:

    • 我有我的 JSONArray 并试图将我的文档列表转换为 JSON 字符串。我不确定如何转换它。我有一个单独的问题。 stackoverflow.com/questions/51868548/…
    • 我正在尝试这个,它给出了成功状态,但数据没有发布到弹性。在 Kibana 中找不到它们。那么如何调试这个问题呢?
    • @MansoorShaikh 随时发布您的问题,并以重现您的问题的方式
    【解决方案2】:

    除了 Val 答案的另一个例子: http://web.archive.org/web/20180813044955/http://cscengineer.net/2016/10/22/elastic-search-bulk-api/

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

    【讨论】:

      猜你喜欢
      • 2015-12-28
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2017-10-17
      • 2021-12-03
      • 2020-06-15
      • 1970-01-01
      相关资源
      最近更新 更多