java - elasticsearch上满了时会自动执行批量操作吗

标签 java elasticsearch

我正在使用elasticsearch java API。

我有一个批量请求,并且我要在此批量中添加几个更新请求。我没有正在执行的更新次数,因为它取决于之前的操作。

bulkRequest.add(esClientManager.getEsClient().prepareUpdate(...).setDoc(...).setDocAsUpsert(true));

我可能会花费数百万时间来做这件事。

我的问题很简单:批量将在满时自行执行,还是我必须自己检查并在需要时执行它(使用 numberOfActions 检索批量请求的数量)?

最佳答案

你必须自己做。至于什么时候,就看你的数据了。对于我所做的一切,我尝试处理大约 1000 条记录(在我的例子中相当于大约 500K 批量请求)。这似乎是一个很好的内存/时间权衡。

我通常做的事情是这样的

BulkRequestBuilder br = null;
/// some looping construct
while (rs.next()) {
   if (br != null && br.numberOfActions() >= batchSize) {
     processResponse(br.execute().get());
     br = null;
   }
   if (br == null) {
     br = client.prepareBulk();
   }
   // do whatever to create IndexRequest
   br.add(ir);
}
if (br != null) {
  processResponse(br.execute().get());
}

关于java - elasticsearch上满了时会自动执行批量操作吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24914308/

相关文章:

elasticsearch - 从 Elasticsearch 7 索引映射中删除一个字段

c# - 查询返回两个文档而不是一个文档

java - Gradle 可以按特定顺序运行两个测试吗?

elasticsearch - 如何按类型过滤建议查询

java - 基于网络的点对点客户端使用什么技术

Java NoClassDefFoundError 与继承类

elasticsearch - 从 Elasticsearch 的简单分析器更改为标准分析器是否需要重新索引?

php - Elasticsearch 更新legal_argument_exception

java - Tomcat:使用强密码的 TLSv1.2 不起作用

java - 我可以将依赖的 jar 文件直接包含在 jboss EAP 7.3 容器中吗?