ElasticsearchRestTemplate
是在springboot项目中使用elasticsearch资源的主要操作类。
| <dependency> |
| <groupId>org.springframework.boot</groupId> |
| <artifactId>spring-boot-starter-data-elasticsearch</artifactId> |
| </dependency> |
| spring: |
| elasticsearch: |
| rest: |
| uris: http://127.0.0.1:9200 |
| username: elastic |
| password: elastic |
注意,如果es资源没有开启x-pack安全插件的话,可以不加username和password(因为默认是没有的)。
| @RestController |
| @AllArgsConstructor |
| @RequestMapping("/es") |
| public class DemoController { |
| |
| private ElasticsearchRestTemplate elasticsearchRestTemplate; |
| |
| |
| |
| |
| |
| |
| @GetMapping("/list") |
| public List<ListDetailDTO> list() { |
| BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() |
| .filter(QueryBuilders.rangeQuery("receivedAt").from(0L).to(1657623337718L)) |
| |
| .filter(QueryBuilders.fuzzyQuery("_class", "dto")) |
| ; |
| NativeSearchQuery build = new NativeSearchQueryBuilder() |
| .withQuery(queryBuilder) |
| .withPageable(PageRequest.of(1, 2)) |
| .build(); |
| |
| SearchHits<ListDetailDTO> hits = elasticsearchRestTemplate.search(build, ListDetailDTO.class, IndexCoordinates.of("detail")); |
| if (CollectionUtil.isNotEmpty(hits.getSearchHits())) { |
| return hits.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList()); |
| } |
| return null; |
| } |
| |
| |
| |
| |
| |
| |
| @GetMapping("/analyze") |
| public SearchHits<ListDetailDTO> analyze() { |
| |
| AvgAggregationBuilder avgBuilder = AggregationBuilders.avg("avg").field("list.water"); |
| MaxAggregationBuilder maxBuilder = AggregationBuilders.max("max").field("list.water"); |
| MinAggregationBuilder minBuilder = AggregationBuilders.min("min").field("list.water"); |
| |
| BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().filter(QueryBuilders.rangeQuery("receivedAt").from(0L).to(1657723337718L)); |
| |
| NativeSearchQuery build = new NativeSearchQueryBuilder() |
| .addAggregation(avgBuilder) |
| .addAggregation(maxBuilder) |
| .addAggregation(minBuilder) |
| .withQuery(queryBuilder) |
| |
| .withPageable(PageRequest.of(0, 1)) |
| .build(); |
| return elasticsearchRestTemplate.search(build, ListDetailDTO.class, IndexCoordinates.of("detail")); |
| } |
| } |
es官方默认限制索引查询最多只能查询10000条数据,查询第10001条数据开始就会报错:
Result window is too large, from + size must be less than or equal to
但是很多时候10000数据不能满足项目的需求,所以我们就要解除这个限制。
首先,修改es配置放开这个限制
| PUT /index_name/_settings |
| { |
| "index.max_result_window": "20000000" |
| } |
接着,在使用elasticsearchRestTemplate的时候还需要设置两个参数
| NativeSearchQuery build = new NativeSearchQueryBuilder().build(); |
| build.setTrackTotalHits(true); |
| build.setMaxResults(2000000); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端