写点什么

开源一夏 | 这么火的 ES,SpringBoot 结合 ElasticSearch7 实现多条件复合查询

作者:知识浅谈
  • 2022 年 8 月 07 日
  • 本文字数:2225 字

    阅读完需:约 7 分钟

开源一夏 | 这么火的ES,SpringBoot结合ElasticSearch7实现多条件复合查询

🍁 作者:知识浅谈,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/


🎈创建 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/


🎈引入模板数据集

📐第 1 步:



📐第 2 步 :






📐第 3 步:查看数据



🎈创建 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 使用的多条件查询的过程,代码中的注释能帮助你更好的理解。

发布于: 刚刚阅读数: 3
用户头像

知识浅谈

关注

公众号:知识浅谈 2022.06.22 加入

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云社区星级博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
开源一夏 | 这么火的ES,SpringBoot结合ElasticSearch7实现多条件复合查询_开源_知识浅谈_InfoQ写作社区