开发者社区> 知识浅谈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

这么火的ES,SpringBoot结合ElasticSearch7实现多条件复合查询

简介: SpringBoot结合ElasticSearch7实现多条件复合查询
+关注继续查看

image

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云星级博主

📌 擅长领域:全栈工程师、爬虫、ACM算法

💒 公众号:知识浅谈

🔥 联系方式vx:zsqtcc

🤞springBoot结合ElasticSearch7实现多条件复合查询🤞

在当前的项目中,ES几乎是不可获取的,今天来实现一下。

🎈创建ElasticSearch

为了方便,使用docker的方法创建ElasticSearch,前提是docker已经安装。

docker run -d --name ES -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e “ES_JAVA_OPTS=-Xms512m -Xmx512m” elasticsearch:7.14.0

上方的命令中指定9200和9300对应宿主机的9200和9300端口,.type 指定ES部署的形式为单节点而不是集群的形式,-xms -xmx 一定要制定,因为默认占用的太大,可能性能低的机器顶不住.

访问地址:http://你的ip地址:9200/

image

🎈创建kibana

为了方便,也选用docker的方式进行安装。

docker run -d --name kib01-test -p 5601:5601 -e “ELASTICSEARCH_HOSTS=http://你的ip地址:9200” kibana:7.14.0

上边的命令中使用ELASTICSEARCH_HOSTS指定对应的ES的地址为http://你的ip地址:9200,这样就可以在创建kibana的时候从指定的ES地址中获取数据进行监控。

访问地址:http://你的ip地址:5601/

image

🎈引入模板数据集

📐第 1 步:

image

📐第 2 步 :

image

image

image

image

📐第 3 步:查看数据

image

image

🎈创建springboot结合ElasticSearch

注意引入的依赖的版本和kibana和elasticsearch版本需要一致

🍮引入依赖

<dependency>
     <groupId>org.elasticsearch.client</groupId>
     <artifactId>elasticsearch-rest-high-level-client</artifactId>
     <version>7.14.0</version>
 </dependency>
 <dependency>
     <groupId>org.elasticsearch.client</groupId>
     <artifactId>elasticsearch-rest-client</artifactId>
     <version>7.14.0</version>
 </dependency>
 <dependency>
     <groupId>org.elasticsearch</groupId>
     <artifactId>elasticsearch</artifactId>
     <version>7.14.0</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
 <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.9.0</version>
 </dependency>

🍮创建测试类

@SpringBootTest //说明是一个springboot 的测试用例
public class ESTestSearcher {
    @Test
    public void test() throws IOException { //说明是一个Junit的测试用例
        RestHighLevelClient restHighLevelClient = null;
        try {
            //构建客户端,创建请求
            //实例化RestHighLevelClient对象,传入IP端口
            restHighLevelClient  = new RestHighLevelClient(RestClient.builder(new HttpHost("你的ip地址",9200)));
            //构建boolean查询Builder,组织多条件查询
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            //设置条件起始地:Venice 终止地:CN
            boolQueryBuilder.must(QueryBuilders.termQuery("OriginCityName","Venice"));
            boolQueryBuilder.must(QueryBuilders.termQuery("DestCountry","CN"));
            //设置附加条件  如排序
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            //把boolean查询带入searchsourcebuilder中
            searchSourceBuilder.query(boolQueryBuilder);
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(10);
            //开启命中统计(部分也是总行数),这一页设置为true,否则默认上限为10000
            searchSourceBuilder.trackTotalHits(true);
            //按照平均票价升序排列
            searchSourceBuilder.sort("AvgTicketPrice", SortOrder.ASC);
            //构建查询请求,指定索引为kibana_sample_data_flights
            SearchRequest request = new SearchRequest("kibana_sample_data_flights");
            request.source(searchSourceBuilder);
            //执行查询,得到查询响应对象,封装离线集合
            SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
            //得到查询命中对象的文档集合
            SearchHit[] hits = response.getHits().getHits();//第一个getHits是得到相应的集合对象,第二个是得到响应的集合。
            ArrayList<Map<String, Object>> list = new ArrayList<>();
            Gson gson = new Gson();
            for (SearchHit hit : hits) {
                String sourceAsString = hit.getSourceAsString();
                Map<String,Object> doc = gson.fromJson(sourceAsString, new TypeToken<LinkedHashMap<String, Object>>() {
                }.getType());
                System.out.println(doc);
                list.add(doc);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            restHighLevelClient.close(); //断开连接
        }
    }
}

🍚总结

可以从上到下跟着实现一下,体验一下这个ES使用的多条件查询的过程,代码中的注释能帮助你更好的理解。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于SpringBoot实现让日志像诗一样有韵律
基于SpringBoot实现让日志像诗一样有韵律
64 0
SpringBoot实现国际化i18n功能
SpringBoot实现国际化i18n功能
342 0
SpringBoot集成mybatis-plus及分页实现
SpringBoot集成mybatis-plus及分页实现
165 0
SpringBoot+VUE+ MyBatis实现人事管理系统(已开源)
SpringBoot+VUE+ MyBatis实现人事管理系统(已开源)
248 0
SpringBoot+mybatis+Vue实现前后端分离小项目
SpringBoot+mybatis+Vue实现前后端分离小项目
122 0
基于SpringBoot实现让日志像诗一样有韵律(日志追踪)
基于SpringBoot实现让日志像诗一样有韵律(日志追踪)
90 0
SpringBoot从入门到精通(三十五)使用@Scheduled实现多线程定时任务
默认情况下,Spring Boot定时任务是按单线程方式执行的,也就是说,如果同一时刻有两个定时任务需要执行,那么只能在一个定时任务完成之后再执行下一个。如果只有一个定时任务,这样做肯定没问题;当定时任务增多时,如果一个任务被阻塞,则会导致其他任务无法正常执行。要解决这个问题,需要配置任务调度线程池。
243 0
springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作
springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作
515 0
SpringBoot项目实现配置分离
SpringBoot项目实现配置分离
52 0
+关注
知识浅谈
🍁 作者:知识浅谈,CSDN签约讲师,阿里云社区专家博主,华为云云享专家,热爱分享创作 💒 公众号:知识浅谈 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 联系方式vx:zsqtcc
89
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载