@Grab(group='org.elasticsearch.client', module='elasticsearch-rest-high-level-client', version='7.15.0')
import org.elasticsearch.client.RestHighLevelClient
import org.elasticsearch.client.RequestOptions
import org.elasticsearch.action.bulk.BulkRequest
import org.elasticsearch.action.index.IndexRequest
import org.elasticsearch.action.bulk.BulkResponse
import org.elasticsearch.common.xcontent.XContentType
import java.nio.file.Files
import java.nio.file.Paths
// Elasticsearch 源集群的地址和端口
def sourceHost = "localhost"
def sourcePort = 9200
// Elasticsearch 目标集群的地址和端口
def targetHost = "localhost"
def targetPort = 9200
// Elasticsearch 索引名称和类型
def indexName = "your_index_name"
def indexType = "_doc"
// 创建 Elasticsearch 客户端
def sourceClient = new RestHighLevelClient(
RestClient.builder(
new HttpHost(sourceHost, sourcePort, "http")
)
)
def targetClient = new RestHighLevelClient(
RestClient.builder(
new HttpHost(targetHost, targetPort, "http")
)
)
// 读取导出的索引数据文件
def inputFile = Paths.get("output.json")
def sourceData = Files.readAllBytes(inputFile)
def sourceDocs = new groovy.json.JsonSlurper().parseText(sourceData)
// 创建一个批量请求
def bulkRequest = new BulkRequest()
sourceDocs.each { doc ->
// 创建一个索引请求,将文档内容添加到请求中
def indexRequest = new IndexRequest(indexName, indexType)
.source(doc, XContentType.JSON)
// 将索引请求添加到批量请求中
bulkRequest.add(indexRequest)
}
// 发送批量请求,获取响应结果
BulkResponse bulkResponse = targetClient.bulk(bulkRequest, RequestOptions.DEFAULT)
// 处理响应结果
if (bulkResponse.hasFailures()) {
println "导入数据时发生错误:${bulkResponse.buildFailureMessage()}"
} else {
println "数据导入成功!共导入 ${bulkRequest.numberOfActions()} 条数据。"
}
// 关闭 Elasticsearch 客户端
sourceClient.close()
targetClient.close()