Java 如何在elasticsearch批处理中使用BulkProcessor
我需要使用Elasticsearch的bulkprocessor将一些批量数据插入Elasticsearch。 这是我从elastic.co得到的Java 如何在elasticsearch批处理中使用BulkProcessor,java,
elasticsearch,Java,
elasticsearch,我需要使用Elasticsearch的bulkprocessor将一些批量数据插入Elasticsearch。 这是我从elastic.co得到的 import org.elasticsearch.action.bulk.BulkProcessor; BulkProcessor bulkProcessor = BulkProcessor.builder( client, new BulkProcessor.Listener() { @Override
import org.elasticsearch.action.bulk.BulkProcessor;
BulkProcessor bulkProcessor = BulkProcessor.builder(
client,
new BulkProcessor.Listener() {
@Override
public void beforeBulk(long executionId,
BulkRequest request) { }
@Override
public void afterBulk(long executionId,
BulkRequest request,
BulkResponse response) { }
@Override
public void afterBulk(long executionId,
BulkRequest request,
Throwable failure) { }
})
.setBulkActions(10000)
.setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB))
.setFlushInterval(TimeValue.timeValueSeconds(5))
.setConcurrentRequests(1)
.build();
bulkProcessor.add(new IndexRequest("twitter", "tweet", "1").source("helloworld"));
bulkProcessor.add(new DeleteRequest("twitter", "tweet", "2"));
是否需要为所有批插入过程调用BulkProcessor.builder?这是使用bulkprocessor的正确方法吗?我找到了答案。下面的代码就是这样做的
import static org.elasticsearch.common.xcontent.XContentFactory.*;
BulkRequestBuilder bulkRequest = client.prepareBulk();
// either use client#prepare, or use Requests# to directly build index/delete requests
bulkRequest.add(client.prepareIndex("twitter", "tweet", "1")
.setSource(jsonBuilder()
.startObject()
.field("user", "kimchy")
.field("postDate", new Date())
.field("message", "trying out Elasticsearch")
.endObject()
)
);
bulkRequest.add(client.prepareIndex("twitter", "tweet", "2")
.setSource(jsonBuilder()
.startObject()
.field("user", "kimchy")
.field("postDate", new Date())
.field("message", "another post")
.endObject()
)
);
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
if (bulkResponse.hasFailures()) {
// process failures by iterating through each bulk response item
}