作者:我财我乐汽车869 | 来源:互联网 | 2023-02-07 00:12
为了提高性能,我希望将文档批量发送到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进行批量插入?
1> Val..:
是的,这是正确的,现在REST客户端只允许向ES发送原始REST查询,但没有太复杂.Elastic正在开发一个高级客户端,它将在REST客户端上运行,并允许您发送DSL查询等.
现在,这是一个示例代码,可用于将文档批量发送到ES服务器:
RestClient client = ...;
String actiOnMetaData= String.format("{ \"index\" : { \"_index\" : \"%s\", \"_type\" : \"%s\" } }%n", index, type);
List 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
}