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/

相关文章:

java - 考虑重复,在数组中存储随机值

elasticsearch - 使用 gitlab runner 在服务中运行配置命令

elasticsearch - 按字段值对文档进行分组

spring - 通过 Jhipster 中的 UI 使用 Elasticsearch 对现有数据库 MySQL 执行搜索操作

elasticsearch - clientip的elasticsearch sum请求(iis日志)

java - 调用对象是什么意思?

java - 在 java 中读取和写入 xml

Java 内存模型 : reordering and concurrent locks

linux - JasperReports 在 Linux 机器上失败

elasticsearch - ElasticSearch:是否可以在搜索请求期间生成 “Temporary Field”?