es7.+(五)-- springBoot使用ES-Rest-Client整合high-level-client
目录
- 为什么使用ES-Rest-Client
- 其他工具
- 通过9300:tcp
- 构建
- 导入maven地址
- 使用---详细见官方文档
- 存储信息到es
- 查询和聚合分析数据
- 实现高亮检索
- 实现复合查询
- 实现多重查询
为什么使用ES-Rest-Client
其他工具
通过9300:tcp
- 由于springboot版本不同,transport-api.jar不同,不能适配较高的es版本
- 7.x不建议使用,8.0要废弃
通过9200:http发送请求
JestClient:非官方,更新慢
RestTemplate:spring自带的,模拟发送Http请求,ES很多操作(DSL语句)需要自己封装,麻烦
HttpClient:同上Elasticsearch-Rest-Client:官方提供,封装了ES操作,API层次分明,上手简单
(https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-hight.html)构建
导入maven地址
org.elasticsearch.client elasticsearch-rest-high-level-client 7.6.2 -
查看springboot2.4.3的es依赖配置
发现是7.9.3版本而我们用的是7.6.2版本 -
在pom.xml中配置版本号为7.6.2
可以看到maven依赖全部变为7.6.2了
使用---详细见官方文档
Java Rest Client官方文档,(https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high.html)
存储信息到es
public void indexData() throws IOException { //创建构造器指定idnex索引 IndexRequest indexRequest = new IndexRequest("users"); indexRequest.id("1");//id //以k-v形式存储 // indexRequest.source("userName","zhangsan","age",18,"gender","男"); //以实体类存储 User user = new User(); user.setAge(18); user.setUserName("zhansan"); user.setGender("男"); ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(user); indexRequest.source(json, XContentType.JSON);//要保存的内容,一定要传内容类型 //执行操作 IndexResponse index = client.index(indexRequest, ElasticSearchConfig.COMMON_OPTIONS); //提取有用的响应数据 System.out.println(index); }查询和聚合分析数据
各种查询在QueryBuilders工具类中都有
AggregationBuilders是聚合分析的工具类public void searchData() throws IOException{ //创建检索请求 SearchRequest searchRequest = new SearchRequest(); searchRequest.indices("bank");//指定检索的索引 //指定DSL,检索条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //构造检索条件 sourceBuilder.query(QueryBuilders.matchQuery("address","mill")); //使用聚合 //1).按照年龄大小分布进行聚合 TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10); sourceBuilder.aggregation(ageAgg); //2).计算平均薪资 AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance"); sourceBuilder.aggregation(balanceAvg); //System.out.println("检索条件"+sourceBuilder.toString()); System.out.println(sourceBuilder.toString()); // searchSourceBuilder.from(); // searchSourceBuilder.size(); // searchSourceBuilder.aggregation(); searchRequest.source(sourceBuilder); //执行检索 SearchResponse searchResponse = client.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS); //System.out.println(searchResponse.toString()); //3.分析结果 searchResponse ObjectMapper objectMapper = new ObjectMapper(); //转化为map可以提取出想要的值 // Map map = objectMapper.readValue(searchResponse.toString(), Map.class); //官方还提供了简便方法可以直接获取查询,聚合的结果 SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits();//获取所有命中的记录 for (SearchHit hit:searchHits){ String json = hit.getSourceAsString(); Account account = objectMapper.readValue(json,Account.class); } //获取检索到的聚合分析信息 Aggregations aggregations = searchResponse.getAggregations(); aggregations.asList();//将所有聚合信息转化为list for(Aggregation aggregation1:aggregations.asList()){ aggregation1.getName();//打印出当前聚合名字,例如ageAgg、balanceAvg } Terms ageAgg1 = aggregations.get("ageAgg"); for (Terms.Bucket bucket:ageAgg1.getBuckets()){ String keyAsString = bucket.getKeyAsString(); System.out.println("年龄"+keyAsString); } Avg balanceAvg1 = aggregations.get("balanceAvg"); System.out.println("获取平均薪资"+balanceAvg1.getValue()); }实现高亮检索
(https://blog.csdn.net/qq_37362891/article/details/103295317)
实现复合查询
(https://blog.csdn.net/u014646662/article/details/97130086)
实现多重查询
/** * 实现多重查询 */ @Test public void test9() throws IOException { MultiSearchRequest request = new MultiSearchRequest(); SearchRequest firstSearchRequest = new SearchRequest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("goodsTitle","英雄联盟")); searchSourceBuilder.from(0); searchSourceBuilder.size(10); firstSearchRequest.source(searchSourceBuilder); request.add(firstSearchRequest); System.out.println("检索一:"+searchSourceBuilder.toString()); SearchRequest secondSearchRequest = new SearchRequest(); searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("goodsDes","英雄联盟")); searchSourceBuilder.from(0); searchSourceBuilder.size(10); secondSearchRequest.source(searchSourceBuilder); System.out.println("检索二:"+searchSourceBuilder.toString()); request.add(secondSearchRequest); System.out.println(request.toString()); MultiSearchResponse getResponse = client.msearch(request,ElasticSearchConfig.COMMON_OPTIONS); System.out.println(getResponse); }
- 其他工具