【GPT】用groovy写一个,从elasic导出index的程序

发布时间 2023-04-25 00:20:55作者: 老翼
@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.search.SearchRequest
import org.elasticsearch.action.search.SearchResponse
import org.elasticsearch.search.builder.SearchSourceBuilder
import org.elasticsearch.index.query.QueryBuilders
import org.elasticsearch.index.query.MatchAllQueryBuilder

import java.nio.file.Files
import java.nio.file.Paths

def client = new RestHighLevelClient(
    RestClient.builder(
        new HttpHost("localhost", 9200, "http")
    )
)

// 设置要导出的索引名
def indexName = "your_index_name"

// 创建一个搜索请求
def searchRequest = new SearchRequest(indexName)
// 设置搜索条件,这里使用 MatchAllQueryBuilder 表示匹配所有文档
def searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())
searchRequest.source(searchSourceBuilder)

// 发送搜索请求,获取响应结果
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT)

// 处理响应结果,将搜索结果导出到文件中
def hits = searchResponse.getHits().getHits()
def outputFile = Paths.get("output.json")
Files.write(outputFile, new byte[0])
Files.write(outputFile, "[\n".getBytes(), StandardOpenOption.APPEND)
hits.eachWithIndex { hit, index ->
    def source = hit.getSourceAsString()
    Files.write(outputFile, source.getBytes(), StandardOpenOption.APPEND)
    if (index < hits.size() - 1) {
        Files.write(outputFile, ",\n".getBytes(), StandardOpenOption.APPEND)
    }
}
Files.write(outputFile, "\n]".getBytes(), StandardOpenOption.APPEND)

// 关闭 Elasticsearch 客户端
client.close()