java批量写入数据到es
时间: 2024-12-24 18:30:58 浏览: 4
在Java中批量写入数据到Elasticsearch(ES),通常会利用Elasticsearch客户端库如`elasticsearch-hadoop`、`elasticsearch-rest-high-level-client`或者是直接通过HTTP API。这里我会简单介绍一种常见的方法,即使用`elasticsearch-rest-high-level-client`库。
首先,你需要添加依赖到你的项目中:
```xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.x.y</version> <!-- 请替换实际版本 -->
</dependency>
```
然后,你可以创建一个批量写入操作(BulkProcessor):
```java
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
public void bulkIndexData(RestHighLevelClient client) {
BulkProcessor.Builder builder = new BulkProcessor.Builder(
client,
(request, e) -> {}, // 执行失败的回调处理
executorService); // 使用一个线程池
List<IndexRequest> requests = new ArrayList<>();
for (YourDocument document : yourDocuments) { // 假设yourDocuments是一个文档列表
IndexRequest request = new IndexRequest("your_index")
.id(document.getId())
.source(document.getSource(), XContentFactory.jsonBuilder()); // 设置索引名和源数据
requests.add(request);
}
builder.setBulkActions(50) // 设置每批次发送的请求数量
.setFlushInterval(1000) // 设置刷新间隔,单位毫秒
.start(); // 开始执行批量写入
try {
requests.forEach(builder::add);
} finally {
builder.awaitCompletion(); // 等待所有请求完成
builder.shutdown(); // 关闭处理器
}
}
```
在这个例子中,你需要将`your_index`替换为你想要写入的实际索引名,`YourDocument`代表你的模型类,`document.getSource()`获取对应文档的数据。
阅读全文