赞
踩
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.8.RELEASE</version> <!-- lookup parent from repository ,MAVEN构建jar包时候查找顺序:relativePath元素中的地址–本地仓库–远程仓库 --> <relativePath/> </parent> <groupId>com.lian.gulimall</groupId> <artifactId>gulimall-search</artifactId> <version>0.0.1-SNAPSHOT</version> <name>gulimall-search</name> <description>检索服务</description> <properties> <java.version>1.8</java.version> <elasticsearch.version>7.4.2</elasticsearch.version> </properties> <dependencies> <!--导入高阶es的client--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.2</version> </dependency> <!--json--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> <dependency> <groupId>com.lian.gulimall</groupId> <artifactId>gulimall-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
package com.lian.gulimall.search.config; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ElasticSearchClientConfig { @Bean public RestHighLevelClient restHighLevelClient(){ RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("192.168.56.10", 9200, "http"))); return client; } }
package com.lian.gulimall.search; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; //开启nacos服务注册与发现 @EnableDiscoveryClient //排除数据源 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class GulimallSearchApplication { public static void main(String[] args) { SpringApplication.run(GulimallSearchApplication.class, args); } }
kibana查询数据
GET /test1/_search { "query": { "match_all": {} }, "aggs": { "ageAggs": { "terms": { "field": "age", "size": 10 }, "aggs": { "sexAggs": { "terms": { "field": "sex.keyword", "size": 10 }, "aggs": { "balanceAvg": { "avg": { "field": "salary" } } } } } } }, "size": 0 }
实操增删改查
/** * 注解的意义在于Test测试类要使用注入的类,比如@Autowired注入的类, * 有了@RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效, * 不然直接一个NullPointerExecption */ @RunWith(SpringRunner.class) @SpringBootTest class EsApplicationTests { @Qualifier("restHighLevelClient") @Autowired RestHighLevelClient client; //创建索引 @Test void createIndex() throws IOException { //1、创建索引请求 CreateIndexRequest request = new CreateIndexRequest("pi_index"); //2、执行请求,获得响应 CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); System.out.println(response); } //判断索引是否存在 @Test void existIndex() throws IOException { GetIndexRequest request = new GetIndexRequest("pi_index"); boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); System.out.println(exists); } //删除索引 @Test void deleteIndex() throws IOException { DeleteIndexRequest request = new DeleteIndexRequest("pi_index"); AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT); System.out.println(delete.isAcknowledged()); } //添加文档 @Test void addDoc() throws IOException { //创建对象 User user = new User("皮", 2); //创建请求 IndexRequest request = new IndexRequest("pi_index"); //设置规则 request.id("1"); request.timeout(TimeValue.timeValueSeconds(1)); request.timeout("1s"); //将我们的数据放入请求 json,引入阿里的fastjson request.source(JSON.toJSONString(user), XContentType.JSON); //客户端发送请求,获取响应结果 IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT); System.out.println(indexResponse.toString()); //对应命令返回的状态 CREATED System.out.println(indexResponse.status()); } //判断文档是否存在 @Test void existDoc() throws IOException { //1、判断索引是否存在 GetRequest request = new GetRequest("pi_index", "1"); //不获取返回的上下文了 request.fetchSourceContext(new FetchSourceContext(false)); request.storedFields("_none_"); boolean exists = client.exists(request, RequestOptions.DEFAULT); System.out.println(exists); } //获取文档的信息 @Test void getDoc() throws IOException { //1、判断索引是否存在 GetRequest request = new GetRequest("pi_index", "1"); GetResponse response = client.get(request, RequestOptions.DEFAULT); //打印文档的内容 System.out.println(response.getSourceAsString()); System.out.println(response); } //更新文档的信息 @Test void updateDoc() throws IOException { //1、创建更新请求 UpdateRequest request = new UpdateRequest("pi_index", "1"); request.timeout("1s"); User user = new User("蛋蛋", 3); request.doc(JSON.toJSONString(user),XContentType.JSON); UpdateResponse response = client.update(request, RequestOptions.DEFAULT); //打印文档的内容 System.out.println(response.status()); } //删除文档的信息 @Test void deleteDoc() throws IOException { //1、创建更新请求 DeleteRequest request = new DeleteRequest("pi_index", "1"); request.timeout("1s"); DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT); //打印文档的内容 System.out.println(delete.status()); } //批量插入数据 @Test void Bulk() throws IOException { //1、创建更新请求 BulkRequest request = new BulkRequest(); request.timeout("1s"); ArrayList<User> users = new ArrayList<>(); users.add(new User("zhangsan",2)); users.add(new User("lisi",3)); users.add(new User("wangwu",4)); for (int i = 0; i < users.size(); i++) { request.add(new IndexRequest("pi_index") .id(""+i) .source(JSON.toJSONString(users.get(i)),XContentType.JSON)); } BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT); //打印文档的内容 System.out.println(bulk.hasFailures()); } //查询数据 @Test void search() throws IOException { SearchRequest request = new SearchRequest("pi_index"); //构建搜索条件 SearchSourceBuilder builder = new SearchSourceBuilder(); TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "lisi"); builder.query(termQueryBuilder); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); System.out.println(JSON.toJSONString(response.getHits())); for (SearchHit hit : response.getHits().getHits()) { System.out.println(hit.getSourceAsMap()); } } }
复杂查询
package com.lian.gulimall.search; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.lian.gulimall.search.config.ElasticSearchClientConfig; import com.lian.gulimall.search.config.pojo.User; 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.RequestOptions; 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.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.IOException; @RunWith(SpringRunner.class) @SpringBootTest public class GulimallSearchApplicationTests { @Qualifier(value = "restHighLevelClient") @Autowired private RestHighLevelClient client; /** * 创建索引 */ @Test public void createIndex() throws IOException { } /** * 创建索引且将数据存储到索引 */ @Test public void contextLoads() throws IOException { //设置索引 IndexRequest request = new IndexRequest("lian_index"); //设置文档id,类型已经被淘汰了 request.id("1"); //将对象转为json格式 User user = new User("zhangsan","male",3); //索引中封装数据 request.source(JSON.toJSONString(user), XContentType.JSON); //发送请求 IndexResponse response = client.index(request, RequestOptions.DEFAULT); System.out.println(response.status()); } /** * 查询请求 _search * search api * https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html */ @Test public void SearchRequest() throws IOException { SearchRequest request = new SearchRequest(); request.indices("lian_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); request.source(searchSourceBuilder); //执行检索 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //分析响应 System.out.println(response.status()); System.out.println(response.toString()); } /** * 查询聚合请求 */ @Test public void SearchAggrRequest() throws IOException { SearchRequest request = new SearchRequest(); request.indices("test1"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //按照年龄值分布聚合 TermsAggregationBuilder aggregation = AggregationBuilders .terms("ageAggs").field("age").size(10); searchSourceBuilder.aggregation(aggregation); //计算平均薪资 AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("balanceAvg").field("salary"); searchSourceBuilder.aggregation(avgAggregationBuilder); request.source(searchSourceBuilder); //执行检索 SearchResponse response = client.search(request, RequestOptions.DEFAULT); //结果分析 System.out.println(response.toString()); //将解析好的json字符串转换为对象 JSONObject object = JSON.parseObject(response.toString()); System.out.println(object); //获取所有查到的数据 SearchHits hits = response.getHits(); SearchHit[] hitsHits = hits.getHits(); for (SearchHit hit : hitsHits) { //json字符串 String sourceAsString = hit.getSourceAsString(); JSON.parseObject(sourceAsString); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。