gpt4 book ai didi

java - 使用 Rest 客户端的 Elasticsearch 批量插入

转载 作者:搜寻专家 更新时间:2023-11-01 01:07:34 24 4
gpt4 key购买 nike

为了提高性能,我想将文档批量发送到 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 进行批量插入?

最佳答案

是的,没错,目前 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
}

关于java - 使用 Rest 客户端的 Elasticsearch 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43339120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com