elasticsearch java批量批量大小

2023-11-27

我想使用 java 使用 elasticsearch 批量 api,并想知道如何设置批量大小。

目前我将其用作:

BulkRequestBuilder bulkRequest = getClient().prepareBulk();
while(hasMore) {
    bulkRequest.add(getClient().prepareIndex(indexName, indexType, artist.getDocId()).setSource(json));
    hasMore = checkHasMore();
}
BulkResponse bResp = bulkRequest.execute().actionGet();
//To check failures
log.info("Has failures? {}", bResp.hasFailures());

知道如何设置批量/批量大小吗?


这主要取决于文档的大小、客户端上的可用资源以及客户端的类型(传输客户端或节点客户端)。

节点客户端知道集群上的分片,并将文档直接发送到保存分片的节点,这些分片应该被索引。另一方面,传输客户端是一个普通客户端,它以循环方式将其请求发送到节点列表。然后,批量请求将发送到一个节点,该节点将成为索引时的网关。

由于您使用的是 Java API,因此我建议您查看BulkProcessor,这使得批量索引变得更加容易和灵活。您可以定义自上次批量执行以来的最大操作数、最大大小和最大时间间隔。它会在需要时自动为您执行批量操作。您还可以设置并发批量请求的最大数量。

创建后BulkProcessor像这样:

BulkProcessor bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {
    @Override
    public void beforeBulk(long executionId, BulkRequest request) {
        logger.info("Going to execute new bulk composed of {} actions", request.numberOfActions());
    }

    @Override
    public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
        logger.info("Executed bulk composed of {} actions", request.numberOfActions());
    }

    @Override
    public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
        logger.warn("Error executing bulk", failure);
    }
    }).setBulkActions(bulkSize).setConcurrentRequests(maxConcurrentBulk).build();

您只需将您的请求添加到其中即可:

bulkProcessor.add(indexRequest);

并在最后关闭它以刷新可能尚未执行的任何最终请求:

bulkProcessor.close();

最后回答你的问题:BulkProcessor它还具有合理的默认值:5 MB 大小、1000 个操作、1 个并发请求、无刷新间隔(设置可能有用)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch java批量批量大小 的相关文章

随机推荐