修改pom文件
5.6.14版本
<!-- elasticsearch 搜索引擎 -->
<!--<dependency>-->
<!--<groupId>org.elasticsearch</groupId>-->
<!--<artifactId>elasticsearch</artifactId>-->
<!--<version>5.6.14</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.elasticsearch.client</groupId>-->
<!--<artifactId>elasticsearch-rest-high-level-client</artifactId>-->
<!--<version>5.6.14</version>-->
<!--</dependency>-->
7.10.2版本
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.10.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.10.2</version>
</dependency>
配置类
配置文件
spring:
rest:
host: 192.168.52.38
port: 9296
protocol: http
username:
password:
配置属性
@Data
@ConfigurationProperties(prefix = "spring.rest")
public class RestProperties {
private String host;
private int port;
private String protocol;
private String username;
private String password;
}
5.6.14版本的配置类
@Slf4j
@Configuration
@EnableConfigurationProperties(RestProperties.class)
public class RestClientConfig {
private final RestProperties properties;
public RestClientConfig(RestProperties properties){
this.properties = properties;
}
@Bean
public RestClient restClient(){
if (StringUtils.isBlank(properties.getHost())){
return null;
}
RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(properties.getHost(), properties.getPort(), properties.getProtocol()));
if (StringUtils.isNotBlank(properties.getUsername()) && StringUtils.isNotBlank(properties.getPassword())){
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(properties.getUsername(), properties.getPassword()));
restClientBuilder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
}
restClientBuilder.setMaxRetryTimeoutMillis(50000);
restClientBuilder.setRequestConfigCallback(builder -> {
builder.setConnectTimeout(50000);
builder.setSocketTimeout(50000);
builder.setConnectionRequestTimeout(50000);
return builder;
});
return restClientBuilder.build();
}
@Bean
public RestHighLevelClient highLevelClient(){
RestClient restClient = restClient();
return new RestHighLevelClient(restClient);
}
}
7.10.2版本的配置类
@Slf4j
@Configuration
@EnableConfigurationProperties(RestProperties.class)
public class RestClientConfig {
private final RestProperties properties;
public RestClientConfig(RestProperties properties) {
this.properties = properties;
}
@Bean
public RestHighLevelClient client() {
RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(properties.getHost(), properties.getPort(), properties.getProtocol()));
restClientBuilder.setRequestConfigCallback(builder -> {
builder.setConnectTimeout(5000);
builder.setSocketTimeout(60000);
return builder;
});
restClientBuilder.setHttpClientConfigCallback(builder -> {
builder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build());
return builder;
});
return new RestHighLevelClient(restClientBuilder);
}
}
工具类
5.6.14版本
@Slf4j
@Component
public class RestClientService {
public static final int MAX_DATA_SIZE = 100;
@Autowired
private RestClient client;
@Autowired
private RestHighLevelClient highLevelClient;
private boolean performRequest(String method, String endpoint) {
try {
Response response = client.performRequest(method, endpoint);
return response.getStatusLine().getStatusCode() == 200;
} catch (IOException e) {
log.error(Constants.COUNT_ERROR, e);
}
return false;
}
private boolean performRequest(String method, String endpoint, String query) {
HttpEntity entity = new NStringEntity(query, ContentType.APPLICATION_JSON);
try {
Response response = client.performRequest(method, endpoint, Collections.emptyMap(), entity);
String result = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = JSONObject.parseObject(result);
return jsonObject.getIntValue("total") > 0;
} catch (IOException e) {
log.error(Constants.COUNT_ERROR, e);
}
return false;
}
public boolean createIndex(String indexName) {
if (existsIndex(indexName)) {
log.debug("createIndex error, cause: {} exists", indexName);
return false;
}
String method = "PUT";
String endpoint = "/" + indexName;
return performRequest(method, endpoint);
}
public boolean deleteIndex(String indexName) {
if (!existsIndex(indexName)) {
log.debug("deleteIndex error, cause: {} not exists", indexName);
return false;
}
String method = "DELETE";
String endpoint = "/" + indexName;
return performRequest(method, endpoint);
}
public boolean existsIndex(String indexName) {
String method = "HEAD";
String endpoint = "/" + indexName;
return performRequest(method, endpoint);
}
public String loadText(String filePath) {
String textData = null;
try {
ClassPathResource classPathResource = new ClassPathResource(filePath);
try (InputStream inputStream = classPathResource.getInputStream()) {
textData = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
} catch (Exception e) {
log.error("loadText error:{}", e);
}
return textData;
}
public boolean createIndexMapping(String indexName, String typeName, String filePath) {
String method = "PUT";
String endpoint = "/" + indexName + "/" + typeName + "/_mapping";
return performRequest(method, endpoint, loadText(filePath));
}
public PageInfo<JSONObject> queryPage(String indexName, String typeName, QueryBuilder queryBuilder, BasePageRequest pageRequest, Set<String> highlightFieldSet, boolean isCollapse) {
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
if (pageRequest.getOffsetNum() + pageRequest.getPageSize() > MAX_DATA_SIZE) {
BigDecimal totalDecimal = BigDecimal.valueOf(MAX_DATA_SIZE);
BigDecimal pageSizeDecimal = BigDecimal.valueOf((long) pageRequest.getPageSize());
int pages = totalDecimal.divide(pageSizeDecimal, BigDecimal.ROUND_FLOOR).intValue();
pageRequest.setPageNum(pages);
}
searchSourceBuilder.query(queryBuilder);
if (isCollapse) {
searchSourceBuilder.collapse(new CollapseBuilder("taskId.keyword"));
}
if (Boolean.TRUE.equals(pageRequest.getDoPage())) {
searchSourceBuilder.from(pageRequest.getOffsetNum());
searchSourceBuilder.size(pageRequest.getPageSize());
}
if (Boolean.TRUE.equals(pageRequest.getDoSort())) {
if (StringUtils.isBlank(pageRequest.getSortColumn())) {
throw new ZnbkException("当前方法已启用排序,但未指定排序字段[sortColumn]");
}
searchSourceBuilder.sort(pageRequest.getSortColumn(), SortOrder.fromString(pageRequest.getSortRule()));
}
if (highlightFieldSet != null && !highlightFieldSet.isEmpty()) {
HighlightBuilder highlightBuilder = new HighlightBuilder();
for (String highlightField : highlightFieldSet) {
HighlightBuilder.Field field = new HighlightBuilder.Field(highlightField);
highlightBuilder.field(field);
highlightBuilder.requireFieldMatch(false);
}
searchSourceBuilder.highlighter(highlightBuilder);
}
log.debug(Constants.BUILDER, searchSourceBuilder);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse search = highLevelClient.search(searchRequest);
SearchHits searchHits = search.getHits();
long totalHit = searchHits.getTotalHits();
SearchHit[] searchHitHits = searchHits.getHits();
List<JSONObject> list = new ArrayList<>(searchHitHits.length);
for (SearchHit hit : searchHitHits) {
list.add(JSON.parseObject(hit.getSourceAsString()));
}
return this.buildPageInfo(list, totalHit, pageRequest.getPageNum(), pageRequest.getPageSize());
} catch (IOException e) {
log.error("queryPage error,cause:{}", e);
}
return null;
}
public <T> PageInfo<T> buildPageInfo(List<T> list, long total, Integer pageNum, Integer pageSize) {
com.github.pagehelper.Page<T> gitPage = new com.github.pagehelper.Page<>();
for (int i = 0; i < list.size(); i++) {
gitPage.add(i, list.get(i));
}
gitPage.setTotal(total);
BigDecimal totalDecimal = BigDecimal.valueOf(total);
BigDecimal pageSizeDecimal = BigDecimal.valueOf((long) pageSize);
int pages = totalDecimal.divide(pageSizeDecimal, BigDecimal.ROUND_FLOOR).intValue();
gitPage.setPages(pages);
gitPage.setPageNum(pageNum);
gitPage.setPageSize(pageSize);
gitPage.setStartRow((pageNum - 1) * pageSize);
return new PageInfo<>(gitPage);
}
public List<SearchHit> queryAll(String indexName, String typeName, QueryBuilder queryBuilder) {
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
Long beginTime = System.currentTimeMillis();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(MAX_DATA_SIZE);
searchSourceBuilder.query(queryBuilder);
searchRequest.source(searchSourceBuilder);
List<SearchHit> resultSearchHit = new ArrayList<>();
try {
SearchResponse searchResponse = highLevelClient.search(searchRequest);
Scroll scroll = new Scroll(timeValueMillis(5000));
searchRequest.scroll(scroll);
String scrollId = searchResponse.getScrollId();
SearchHit[] hits = searchResponse.getHits().getHits();
while (ArrayUtils.isNotEmpty(hits)) {
for (SearchHit hit : hits) {
resultSearchHit.add(hit);
}
SearchScrollRequest searchScrollRequest = new SearchScrollRequest(scrollId);
searchScrollRequest.scroll(scroll);
SearchResponse searchScrollResponse = highLevelClient.searchScroll(searchScrollRequest);
scrollId = searchScrollResponse.getScrollId();
hits = searchScrollResponse.getHits().getHits();
}
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
highLevelClient.clearScroll(clearScrollRequest);
} catch (IOException e) {
log.error("queryAll error,cause:{}", e);
}
Long runTime = System.currentTimeMillis() - beginTime;
log.debug("查询时间:{}", runTime);
return resultSearchHit;
}
public Long selectCount(String indexName, String typeName, QueryBuilder queryBuilder) {
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchSourceBuilder.fetchSource(false);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse search = highLevelClient.search(searchRequest);
return search.getHits().getTotalHits();
} catch (Exception e) {
log.error(Constants.COUNT_ERROR, e);
}
return 0L;
}
public Long selectCount(String indexName, String typeName, String aggName, QueryBuilder queryBuilder, AggregationBuilder aggregationBuilder) {
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0);
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.aggregation(aggregationBuilder);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchSourceBuilder.fetchSource(false);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse search = highLevelClient.search(searchRequest);
Aggregations aggregations = search.getAggregations();
Cardinality cardinality = aggregations.get(aggName);
return cardinality.getValue();
} catch (Exception e) {
log.error("select distinct count error cause: {0}", e);
}
return 0L;
}
public SearchResponse selectCount(String indexName, String typeName, AggregationBuilder aggregationBuilder) {
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.types(typeName);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(0);
searchSourceBuilder.aggregation(aggregationBuilder);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchSourceBuilder.fetchSource(false);
log.debug(Constants.BUILDER, searchSourceBuilder);
searchRequest.source(searchSourceBuilder);
try {
return highLevelClient.search(searchRequest);
} catch (IOException e) {
log.error("select aggregate count error cause: {0}", e);
}
return null;
}
public boolean putData(String indexName, String typeName, String idColumn, JSONObject dataObj) {
String method = "PUT";
String endpoint = "/" + indexName + "/" + typeName + "/" + idColumn;
return performRequest(method, endpoint, dataObj.toJSONString());
}
public boolean putDataBulk(String indexName, String typeName, String idColumn, List<JSONObject> datas) {
BulkRequest request = new BulkRequest();
datas.forEach(data -> request.add(new IndexRequest(indexName, typeName, String.valueOf(data.get(idColumn))).source(data, XContentType.JSON)));
try {
BulkResponse bulkResponse = highLevelClient.bulk(request);
log.debug("putDataBulk:{}", bulkResponse);
return !bulkResponse.hasFailures();
} catch (IOException e) {
log.error(Constants.COUNT_ERROR, e);
}
return false;
}
public boolean queryByQuery(String indexName, String typeName, String query) {
String method = "POST";
String endpoint = "/" + indexName + "/" + typeName + "/_search";
return performRequest(method, endpoint, query);
}
public boolean deleteByQuery(String indexName, String typeName, String query) {
String method = "POST";
String endpoint = "/" + indexName + "/" + typeName + "/_delete_by_query";
return performRequest(method, endpoint, query);
}
public boolean updateByQuery(String indexName, String typeName, String query) {
String method = "POST";
String endpoint = "/" + indexName + "/" + typeName + "/_update_by_query?conflicts=proceed";
return performRequest(method, endpoint, query);
}
}
7.10.2版本
@Slf4j
@Component
public class RestClientService {
public static final int MAX_DATA_SIZE = 100;
@Autowired
private RestHighLevelClient client;
public String loadText(String path) {
String textData = null;
try {
ClassPathResource classPathResource = new ClassPathResource(path);
try (InputStream inputStream = classPathResource.getInputStream()) {
textData = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
} catch (Exception e) {
log.error("load mappping file error, cause {0}", e);
}
return textData;
}
public boolean createIndexMapping(String index, String path) {
PutMappingRequest request = new PutMappingRequest(index);
request.source(loadText(path), XContentType.JSON);
try {
AcknowledgedResponse response = client.indices().putMapping(request, RequestOptions.DEFAULT);
return response.isAcknowledged();
} catch (IOException e) {
log.error("create index mapping error, cause {0}", e);
}
return false;
}
public boolean createIndex(String index) {
CreateIndexRequest request = new CreateIndexRequest(index);
try {
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
return response.isAcknowledged();
} catch (Exception e) {
log.error("create index error, cause {0}", e);
}
return false;
}
public boolean deleteIndex(String index) {
if (!existsIndex(index)) {
log.debug("deleteIndex error, cause: {} not exists", index);
return false;
}
DeleteIndexRequest request = new DeleteIndexRequest(index);
try {
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
return response.isAcknowledged();
} catch (Exception e) {
log.error("delete index error, cause {0}", e);
}
return false;
}
public boolean existsIndex(String index) {
GetIndexRequest request = new GetIndexRequest(index);
try {
return client.indices().exists(request, RequestOptions.DEFAULT);
} catch (Exception e) {
log.error("existsIndex error, cause {0}", e);
}
return false;
}
public boolean putData(String index, String id, JSONObject data) {
try {
IndexRequest request = new IndexRequest(index);
if (id != null && id.length() > 0) {
request.id(id);
}
request.source(JSON.toJSONString(data), XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
String status = response.status().toString();
if ("CREATED".equals(status) || "OK".equals(status)) {
return true;
}
} catch (Exception e) {
log.error("put data error, cause {0}", e);
}
return false;
}
public boolean putDataBulk(String index, List<JSONObject> datas) {
try {
BulkRequest bulkRequest = new BulkRequest();
if (!CollectionUtils.isEmpty(datas)) {
for (Object obj : datas) {
bulkRequest.add(new IndexRequest(index).source(JSON.toJSONString(obj), XContentType.JSON));
}
BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
log.debug("putDataBulk:{}", response);
if (!response.hasFailures()) {
return true;
}
}
} catch (Exception e) {
log.error("put data bulk error, cause {0}", e);
}
return false;
}
public boolean updateData(String index, String id, JSONObject data) {
try {
UpdateRequest request = new UpdateRequest(index, id);
request.doc(JSON.toJSONString(data), XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
String status = response.status().toString();
if ("OK".equals(status)) {
return true;
}
} catch (Exception e) {
log.error("update data error, cause {0}", e);
}
return false;
}
public boolean deleteData(String index, String id) {
try {
DeleteRequest request = new DeleteRequest(index, id);
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
String status = response.status().toString();
if ("OK".equals(status)) {
return true;
}
} catch (Exception e) {
log.error("delete data error, cause {0}", e);
}
return false;
}
public boolean deleteDataBulk(String index, List<String> ids) {
BulkRequest request = new BulkRequest();
for (String id : ids) {
request.add(new DeleteRequest().index(index).id(id));
}
try {
BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
return !response.hasFailures();
} catch (Exception e) {
log.error("delete data bulk error, cause {0}", e);
}
return false;
}
public boolean deleteByQuery(String index, QueryBuilder queryBuilder) {
DeleteByQueryRequest request = new DeleteByQueryRequest(index);
request.setRefresh(true);
request.setQuery(queryBuilder);
try {
BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);
return response.getStatus().getDeleted() > 0;
} catch (IOException e) {
log.error("delete by query error, cause {0}", e);
}
return false;
}
public boolean updateByQuery(String index, QueryBuilder queryBuilder, String script) {
UpdateByQueryRequest request = new UpdateByQueryRequest(index);
request.setConflicts("proceed");
request.setQuery(queryBuilder);
request.setScript(new Script(ScriptType.INLINE, "painless", script, Collections.emptyMap()));
try {
BulkByScrollResponse response = client.updateByQuery(request, RequestOptions.DEFAULT);
return response.getStatus().getUpdated() > 0;
} catch (IOException e) {
log.error("update by query error, cause {0}", e);
}
return false;
}
public boolean existsData(String index, String id) {
GetRequest request = new GetRequest(index, id);
try {
GetResponse response = client.get(request, RequestOptions.DEFAULT);
return response.isExists();
} catch (Exception e) {
log.error("existsData error, cause {0}", e);
}
return false;
}
public SearchResponse query(String index, QueryBuilder queryBuilder, AggregationBuilder aggregationBuilder) {
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.trackTotalHits(true);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
if (queryBuilder != null) {
searchSourceBuilder.query(queryBuilder);
}
if (aggregationBuilder != null) {
searchSourceBuilder.aggregation(aggregationBuilder);
}
searchRequest.source(searchSourceBuilder);
try {
return client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("select distinct count error cause: {0}", e);
}
return null;
}
public Long selectCount(String index, QueryBuilder queryBuilder) {
SearchResponse response = query(index, queryBuilder, null);
if (response == null) {
return 0L;
}
return response.getHits().getTotalHits().value;
}
public Long selectCount(String index, String aggName, QueryBuilder queryBuilder, AggregationBuilder aggregationBuilder) {
SearchResponse response = query(index, queryBuilder, aggregationBuilder);
if (response == null) {
return 0L;
}
Aggregations aggregations = response.getAggregations();
Cardinality cardinality = aggregations.get(aggName);
return cardinality.getValue();
}
public PageInfo<JSONObject> queryPage(String index, QueryBuilder queryBuilder, BasePageRequest pageRequest, Set<String> highlightFieldSet, boolean isCollapse) {
SearchRequest request = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
if (pageRequest.getOffsetNum() + pageRequest.getPageSize() > MAX_DATA_SIZE) {
BigDecimal totalDecimal = BigDecimal.valueOf(MAX_DATA_SIZE);
BigDecimal pageSizeDecimal = BigDecimal.valueOf((long) pageRequest.getPageSize());
int pages = totalDecimal.divide(pageSizeDecimal, BigDecimal.ROUND_FLOOR).intValue();
pageRequest.setPageNum(pages);
}
searchSourceBuilder.query(queryBuilder);
if (isCollapse) {
searchSourceBuilder.collapse(new CollapseBuilder("taskId.keyword"));
}
if (Boolean.TRUE.equals(pageRequest.getDoPage())) {
searchSourceBuilder.from(pageRequest.getOffsetNum());
searchSourceBuilder.size(pageRequest.getPageSize());
}
if (Boolean.TRUE.equals(pageRequest.getDoSort())) {
if (StringUtils.isBlank(pageRequest.getSortColumn())) {
throw new ZnbkException("当前方法已启用排序,但未指定排序字段[sortColumn]");
}
searchSourceBuilder.sort(pageRequest.getSortColumn(), SortOrder.fromString(pageRequest.getSortRule()));
}
if (highlightFieldSet != null && !highlightFieldSet.isEmpty()) {
HighlightBuilder highlightBuilder = new HighlightBuilder();
for (String highlightField : highlightFieldSet) {
HighlightBuilder.Field field = new HighlightBuilder.Field(highlightField);
highlightBuilder.field(field);
highlightBuilder.requireFieldMatch(false);
}
searchSourceBuilder.highlighter(highlightBuilder);
}
log.debug(Constants.BUILDER, searchSourceBuilder);
request.source(searchSourceBuilder);
try {
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits searchHits = response.getHits();
long totalHit = searchHits.getTotalHits().value;
SearchHit[] searchHitHits = searchHits.getHits();
List<JSONObject> list = new ArrayList<>(searchHitHits.length);
for (SearchHit hit : searchHitHits) {
list.add(JSON.parseObject(hit.getSourceAsString()));
}
return this.buildPageInfo(list, totalHit, pageRequest.getPageNum(), pageRequest.getPageSize());
} catch (IOException e) {
log.error("queryPage error,cause:{}", e);
}
return null;
}
public <T> PageInfo<T> buildPageInfo(List<T> list, long total, Integer pageNum, Integer pageSize) {
com.github.pagehelper.Page<T> gitPage = new com.github.pagehelper.Page<>();
for (int i = 0; i < list.size(); i++) {
gitPage.add(i, list.get(i));
}
gitPage.setTotal(total);
BigDecimal totalDecimal = BigDecimal.valueOf(total);
BigDecimal pageSizeDecimal = BigDecimal.valueOf((long) pageSize);
int pages = totalDecimal.divide(pageSizeDecimal, BigDecimal.ROUND_FLOOR).intValue();
gitPage.setPages(pages);
gitPage.setPageNum(pageNum);
gitPage.setPageSize(pageSize);
gitPage.setStartRow((pageNum - 1) * pageSize);
return new PageInfo<>(gitPage);
}
public List<SearchHit> queryAll(String index, QueryBuilder queryBuilder) {
Long beginTime = System.currentTimeMillis();
SearchRequest request = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
Scroll scroll = new Scroll(timeValueMillis(5000));
searchSourceBuilder.size(MAX_DATA_SIZE);
searchSourceBuilder.query(queryBuilder);
request.source(searchSourceBuilder);
request.scroll(scroll);
List<SearchHit> resultSearchHit = new ArrayList<>();
try {
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
String scrollId = response.getScrollId();
SearchHit[] hits = response.getHits().getHits();
while (ArrayUtils.isNotEmpty(hits)) {
for (SearchHit hit : hits) {
resultSearchHit.add(hit);
}
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(scroll);
SearchResponse searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
hits = searchResponse.getHits().getHits();
}
if (scrollId != null) {
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
}
} catch (IOException e) {
log.error("queryAll error,cause:{}", e);
}
Long runTime = System.currentTimeMillis() - beginTime;
log.debug("查询时间:{}", runTime);
return resultSearchHit;
}
}