赞
踩
1.安装依赖(注意版本要和自己安装的es版本对应)
- <dependency>
- <groupId>org.elasticsearch.client</groupId>
- <artifactId>elasticsearch-rest-high-level-client</artifactId>
- <version>7.4.2</version>
- </dependency>
打开发现部分依赖和我们es版本不一致,是因为springboot指定了版本,我们需要更换为自己对应版本。
1.1、改为自己es对应版本
<elasticsearch.version>7.4.2</elasticsearch.version>
2.编写配置类
- @Configuration
- public class GullmallElasticSearchConfig {
-
- @Bean
- public RestHighLevelClient esRestClient() {
- RestClientBuilder builder = null;
- builder = RestClient.builder(new HttpHost("192.168.56.10",9200,"http"));
- RestHighLevelClient client = new RestHighLevelClient(builder);
- return client;
- }
- }
3.配置类添加请求选项
- public static final RequestOptions COMMON_OPTIONS;
- static {
- RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
- // builder.addHeader("Authorization", "Bearer " + TOKEN);
- // builder.setHttpAsyncResponseConsumerFactory(
- // new HttpAsyncResponseConsumerFactory
- // .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
- COMMON_OPTIONS = builder.build();
- }
4、测试
4.1、存储数据到es
- package com.atguigu.gulimall.search;
-
- import com.alibaba.fastjson.JSON;
- import com.atguigu.gulimall.search.config.GullmallElasticSearchConfig;
- import lombok.Data;
- import org.elasticsearch.action.index.IndexRequest;
- import org.elasticsearch.action.index.IndexResponse;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.elasticsearch.common.xcontent.XContentType;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- import java.io.IOException;
-
- /**
- * @author cy
- * @create 2022-11-04 12:03
- */
- @SpringBootTest
- public class GulimallSearchApplicationTests {
-
- @Autowired
- private RestHighLevelClient client;
-
-
- /**
- * 测试存储数据到es(更新也可以)
- * @throws IOException
- */
- @Test
- public void indexData() throws IOException {
- IndexRequest indexRequest = new IndexRequest("users");
- indexRequest.id("1");
- // indexRequest.source("userName","zhangsan","age",18,"gender","男");
- User user = new User();
- user.setName("张三");
- user.setGender("男");
- user.setAge(18);
- String jsonString = JSON.toJSONString(user);
- indexRequest.source(jsonString, XContentType.JSON);//要保存的内容
-
- //执行操作
- IndexResponse index = client.index(indexRequest, GullmallElasticSearchConfig.COMMON_OPTIONS);
-
- System.out.println(index);
- }
-
- @Data
- class User {
- private String Name;
- private String gender;
- private Integer age;
- }
-
- }
4.2、检索数据
使用Kibana工具检索
- GET bank/_search
- {
- "query": {
- "match": {
- "address": {
- "query": "mill"
- }
- }
- },
- "aggregations": {
- "ageAgg": {
- "terms": {
- "field": "age",
- "size": 10,
- }
- },
- "balanceAvg": {
- "avg": {
- "field": "balance"
- }
- }
- }
- }
代码实现 :
- package com.atguigu.gulimall.search;
-
- import com.alibaba.fastjson.JSON;
- import com.atguigu.gulimall.search.config.GullmallElasticSearchConfig;
- import com.mysql.cj.QueryBindings;
- import lombok.Data;
- import lombok.ToString;
- import org.elasticsearch.action.index.IndexRequest;
- import org.elasticsearch.action.index.IndexResponse;
- import org.elasticsearch.action.search.SearchRequest;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.elasticsearch.common.xcontent.XContentType;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.elasticsearch.search.aggregations.Aggregation;
- import org.elasticsearch.search.aggregations.AggregationBuilders;
- import org.elasticsearch.search.aggregations.Aggregations;
- import org.elasticsearch.search.aggregations.bucket.terms.Terms;
- import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
- import org.elasticsearch.search.aggregations.metrics.Avg;
- import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder;
- import org.elasticsearch.search.builder.SearchSourceBuilder;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- import javax.naming.directory.SearchResult;
- import java.io.IOException;
-
- /**
- * @author cy
- * @create 2022-11-04 12:03
- */
- @SpringBootTest
- public class GulimallSearchApplicationTests {
-
- @Autowired
- private RestHighLevelClient client;
-
- @ToString
- @Data
- static class Account {
-
- private int account_number;
-
- private int balance;
-
- private String firstname;
-
- private String lastname;
-
- private int age;
-
- private String gender;
-
- private String address;
-
- private String employer;
-
- private String email;
-
- private String city;
-
- private String state;
- }
-
- @Test
- public void searchData() throws IOException {
- //1、创建构建索引
- SearchRequest searchRequest = new SearchRequest();
- //1、指定索引
- searchRequest.indices("bank");
- SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
- //1.1、构造检索条件
- sourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
-
- //1.2、按照年龄的值分布进行聚合
- TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
- sourceBuilder.aggregation(ageAgg);
-
- //1.3、计算平均薪资
- AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
- sourceBuilder.aggregation(balanceAvg);
-
- System.out.println("检索条件"+sourceBuilder.toString());
- searchRequest.source(sourceBuilder);
-
- //2、执行检索
- SearchResponse searchResponse = client.search(searchRequest, GullmallElasticSearchConfig.COMMON_OPTIONS);
-
- //3、分析结果
- System.out.println(searchResponse.toString());
-
- //3.1)、获取所有查到的数据
- SearchHits hits = searchResponse.getHits();
- SearchHit[] searchHits = hits.getHits();
- for (SearchHit hit : searchHits) {
- String string = hit.getSourceAsString();
- Account account = JSON.parseObject(string, Account.class);
- System.out.println("account"+account);
- }
-
- //3.2、获取这次检索到的分析信息
- Aggregations aggregations = searchResponse.getAggregations();
- Terms ageAgg1 = aggregations.get("ageAgg");
- for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
- String keyAsString = bucket.getKeyAsString();
- System.out.println("年龄:"+keyAsString + "==>" +bucket.getDocCount());
- }
-
- Avg balanceAvg1 = aggregations.get("balanceAvg");
- System.out.println("平均薪资:"+balanceAvg1.getValue());
- }
-
- }
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。