@RestController
public class ElasticSearchTestController {
// 初始化Logger类:使用指定的类初始化 LoggerFactory,输出日志所在类的信息。
private static Logger logger = LoggerFactory.getLogger(ElasticSearchTestController.class);
private static String IP = "es地址";
private static int Port = 9300;//集群端口用9300
private static String index = "data";//es索引
private static String type = "esa";//es表
@PostMapping("/query")
public void query() throws Exception {
int size = 10000; //设置每次滚动输出条数
long startTime = System.currentTimeMillis(); //获取开始时间
String path = "D:\\output\\test.xlsx";
Settings esSettings = Settings.builder()
.put("cluster.name", "elasticsearch") //设置ES实例的名称
.build();
TransportClient client = new PreBuiltTransportClient(esSettings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(IP), Port));
//SearchRequestBuilder srb = client.prepareSearch("tbdata").setTypes("tmd").setFrom(0).setSize(size);
SearchResponse response = client.prepareSearch(index).setTypes(type)
.addSort(SortBuilders.fieldSort("_doc"))
.setSize(size).setScroll(new TimeValue(600000)).execute() //scroll每次循环时间,存在内存中,下次循环接着该ID继续
.actionGet();
//SearchResponse sr = srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet(); // 查询所有
long totalCount = response.getHits().totalHits;
System.out.println("总条数是:"+totalCount);
int page = (int) totalCount / size;
XSSFWorkbook workbook = new XSSFWorkbook();//创建表
XSSFSheet sheet = workbook.createSheet("test");//创建sheet页*/
//把第一行字段行写入sheet
createFirstRow(response, sheet);
//把数据写入sheet
createOtherRow(response, sheet);
writeData(workbook, path);//写入excel表
for (int i = 0; i < page - 1; i++) {
System.out.println("第"+i+"次循环");
//再次发送请求,并使用上次搜索结果的ScrollId
response = client.prepareSearchScroll(response.getScrollId())
.setScroll(new TimeValue(600000)).execute()
.actionGet();
createOtherRow(response, sheet);
writeData(workbook, path);
}
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("运行时间:" + (endTime - startTime) + "ms");
//处理结束后,记得clean scroll
ClearScrollRequest requests = new ClearScrollRequest();
requests.addScrollId(response.getScrollId());
client.clearScroll(requests);
}
/**
* 构造首行的结构,未设置字段类型
*/
private void createFirstRow(SearchResponse response, XSSFSheet sheet) {
if (response.getHits().getTotalHits() != 0) {
XSSFRow row = sheet.createRow(0); //创建行
Map<String, Object> map = response.getHits().getAt(0).getSourceAsMap();
int k = 0;
XSSFCell cell;
for (Map.Entry<String, Object> entry : map.entrySet()) {
cell = row.createCell(k); //创建单元格
cell.setCellValue(entry.getKey());
k++;
}
}
}
/**
* 把数据写入sheet
*/
private void createOtherRow(SearchResponse response, XSSFSheet sheet) throws Exception {
SearchHit[] hits = response.getHits().getHits();
for (int i = 0; i < hits.length; i++) {
Map<String, Object> sourceAsMap = response.getHits().getAt(i).getSourceAsMap();
int k =0;
String origin = (String) sourceAsMap.get("remark");
if (origin.contains("通用")) {
//String id = response.getHits().getAt(i).getId();
System.out.println(origin);
XSSFRow row1 = sheet.createRow(i+1);//从第一行开始写入
for (Map.Entry<String, Object> entry : sourceAsMap.entrySet()) {
row1.createCell(k).setCellValue(entry.getValue().toString());
k++;
}
}
}
}
/**
* 导出数据到本地
*/
private void writeData(XSSFWorkbook workbook, String path) {
try {
FileOutputStream fos = new FileOutputStream(path);
workbook.write(fos);
fos.flush();//刷新,下次循环接着写,不会覆盖之前的数据
System.out.println("写入成功");
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
es版本需要和安装的版本一致
<java.version>1.8</java.version>
<elasticsearch.version>6.2.4</elasticsearch.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.2.4</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.2.4</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.2.4</version>
</dependency>
<!-- <dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.3</version>
</dependency>-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>stax</groupId>
<artifactId>stax-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.2.4</version>
</dependency>
引用于:https://blog.csdn.net/qq_34624315/article/details/81364045