【GPT】用groovy写一个,把index导入elasic的程序

发布时间 2023-04-25 00:26:57作者: 老翼
@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()