1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.15.0</version>
</dependency>
2、es配置
spring:
data:
elasticsearch:
cluster-nodes: localhost:9200
3、创建ESUtils工具类
import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Component
public class ESUtils {
@Resource
private RestHighLevelClient elasticsearchClient;
public List<String> queryDataInRange(String indexName, SearchSourceBuilder sourceBuilder) {
List<String> results = new ArrayList<>();
String scrollId = null;
try {
SearchRequest searchRequest = new SearchRequest(indexName)
.source(sourceBuilder)
.scroll(TimeValue.timeValueMinutes(1));
SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
SearchHit[] searchHits = searchResponse.getHits().getHits();
results.addAll(processHits(searchHits));
while (searchHits != null && searchHits.length > 0) {
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId)
.scroll(TimeValue.timeValueMinutes(1));
searchResponse = elasticsearchClient.scroll(scrollRequest, RequestOptions.DEFAULT);
scrollId = searchResponse.getScrollId();
searchHits = searchResponse.getHits().getHits();
results.addAll(processHits(searchHits));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (scrollId != null) {
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
try {
elasticsearchClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return results;
}
private List<String> processHits(SearchHit[] searchHits) {
List<String> results = new ArrayList<>();
for (SearchHit hit : searchHits) {
results.add(hit.getSourceAsString());
}
return results;
}
}
4、测试工具类
import com.example.es.utils.ESUtils;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
class EsDemoApplicationTests {
@Resource
private ESUtils esUtils;
@Test
void contextLoads() {
RangeQueryBuilder queryBuilder = QueryBuilders
.rangeQuery("timeField")
.gte("2024-03-18 00:00:00")
.lte("2024-03-18 23:59:59");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder()
.query(queryBuilder)
.sort("timeField", SortOrder.ASC)
.size(1000);
List<String> resultMap = esUtils.queryDataInRange("index-Bank", sourceBuilder);
resultMap.forEach(System.out::println);
}
}