当前位置: 首页 > news >正文

ElasticSeach--springboot中使用

目录

一.引入依赖

 二.配置链接信息

 三.索引库测试

1.创建索引库

2.查询索引库

3.删除索引库

四.文档测试

1.添加文档

2.修改文档

3.删除文档

4.查询具体文档

5.批量添加文档

五.查询测试

 1.查询所有

2.根据属性term匹配查询

3.分页查询

4.排序

5.过滤属性

6.bool查询

7.范围查询

8.模糊查询

9.高亮查询

 10.聚合查询

 10.1最大年龄

10.2分组查询


一.引入依赖

    <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!--es的客户端--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.8.0</version></dependency></dependencies>

 二.配置链接信息

#自定义elasticsearch连接配置
elasticsearch:host: 192.168.81.128port: 9200
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchConfig {private String host;private int port;@Beanpublic RestHighLevelClient client(){return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port, "http")));}
}

 三.索引库测试

1.创建索引库

    /***  添加索引库*/@Testpublic void AddIndex() throws IOException {//创建索引库CreateIndexRequest request = new CreateIndexRequest("user");//获取响应CreateIndexResponse response =restHighLevelClient.indices().create(request,RequestOptions.DEFAULT);boolean acknowledged = response.isAcknowledged();System.out.println("响应状态:"+acknowledged);}

2.查询索引库

//查询索引库@Testpublic void testGetIndex() throws IOException {GetIndexRequest request = new GetIndexRequest("user");GetIndexResponse response = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);//System.out.println(response.getAliases());//获取默认配置System.out.println(response.getDefaultSettings());//获取索引名称System.out.println(Arrays.toString(response.getIndices()));//获取映射System.out.println(response.getMappings());}

3.删除索引库

/*** 删除索引库*/@Testpublic void testDeleteIndex() throws IOException {//删除索引请求DeleteIndexRequest request = new DeleteIndexRequest("user");AcknowledgedResponse response = restHighLevelClient.indices().delete(request,RequestOptions.DEFAULT);System.out.println(response.isAcknowledged());restHighLevelClient.close();}

四.文档测试

1.添加文档

/***  添加文档*/@Testpublic void testAddDoucument() throws IOException {/*** 第一次不存在时是创建,*  第二次存在时就是修改,将修改version版本号*/IndexRequest indexRequest = new IndexRequest("user");indexRequest.id("122");User user = new User();user.setId(122);user.setName("张三");user.setAge(12);user.setScore(123);//添加数据indexRequest.source(JSON.toJSONString(user), XContentType.JSON);IndexResponse response = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);//获取索引库idSystem.out.println(response.getIndex());//获取文档idSystem.out.println(response.getId());//获取版本System.out.println(response.getVersion());//获取结果System.out.println(response.getResult());}

2.修改文档

/*** 修改文档*/@Testpublic void testUpadteDoc() throws IOException {UpdateRequest updateRequest = new UpdateRequest("user","122");User user = new User();user.setId(122);user.setName("张三");user.setAge(13);user.setScore(123);updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);UpdateResponse res = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);System.out.println(res.getId());System.out.println(res.getIndex());System.out.println(res.getResult());System.out.println(res.getVersion());restHighLevelClient.close();}

3.删除文档

/***  删除文档*/@Testpublic void testDelteDoc() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("user","122");DeleteResponse res = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(res.getId());System.out.println(res.getIndex());System.out.println(res.getResult());}

4.查询具体文档

    /*** 查询文档*/@Testpublic void testGetDoc() throws IOException {GetRequest getRequest =new GetRequest("user","122");GetResponse res = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);System.out.println(res.getIndex());System.out.println(res.getId());System.out.println(res.getSource());System.out.println(res.getFields());System.out.println(res.getSourceAsString()); //返回json串
//        user
//        122
//        {score=123, name=张三, id=122, age=12}
//        {}
//        {"age":12,"id":122,"name":"张三","score":123}}

5.批量添加文档

 /*** 批量添加文档*/@Testpublic void testBulkAdd() throws IOException {User user1 = new User(1,"王五",12,213);User user2 = new User(2,"李四",321,213);User user3 = new User(3,"赵六",24,213);User user4 = new User(4,"zhangsan",41,213);User user5 = new User(5,"蔡徐坤",21,213);BulkRequest request = new BulkRequest("user");IndexRequest request1 = new IndexRequest("user").id(user1.getId().toString());request1.source(JSON.toJSONString(user1),XContentType.JSON);IndexRequest request2 = new IndexRequest("user").id(user2.getId().toString());request2.source(JSON.toJSONString(user2),XContentType.JSON);IndexRequest request3 = new IndexRequest("user").id(user3.getId().toString());request3.source(JSON.toJSONString(user3),XContentType.JSON);IndexRequest request4 = new IndexRequest("user").id(user4.getId().toString());;request4.source(JSON.toJSONString(user4),XContentType.JSON);IndexRequest request5 = new IndexRequest("user").id(user5.getId().toString());request5.source(JSON.toJSONString(user5),XContentType.JSON);request.add(request1);request.add(request2);request.add(request3);request.add(request4);request.add(request5);BulkResponse res = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);System.out.println(res.getIngestTook());System.out.println(res.getTook());System.out.println(res.getIngestTookInMillis());}

五.查询测试

 1.查询所有

 /*** 查询所有*/@Testpublic void testqueryAll() throws IOException {SearchRequest searchRequest = new SearchRequest();//指定索引库searchRequest.indices("user");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//查询所有sourceBuilder.query(QueryBuilders.matchAllQuery());searchRequest.source(sourceBuilder);SearchResponse res = client.search(searchRequest, RequestOptions.DEFAULT);//查询匹配SearchHits hits = res.getHits();System.out.println("took:" + res.getTook());System.out.println("是否超时:" + res.isTimedOut());System.out.println("TotalHits:" + hits.getTotalHits());System.out.println("MaxScore:" + hits.getMaxScore());for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

2.根据属性term匹配查询

/*** 根据term条件查询* @throws IOException*/@Testpublic void testTermQuery() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");//构建查询的请求体SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//查询所有对象sourceBuilder.query(QueryBuilders.termQuery("name","zhangsan"));request.source(sourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);//查询匹配SearchHits hits = response.getHits();System.out.println("took:" + response.getTook());System.out.println("是否超时:" + response.isTimedOut());System.out.println("TotalHits:" + hits.getTotalHits());System.out.println("MaxScore:" + hits.getMaxScore());for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

3.分页查询

 /*** 分页查询*/@Testpublic void testPageQuery() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");//构建查询的请求体SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//查询所有对象sourceBuilder.query(QueryBuilders.matchAllQuery());//第一页sourceBuilder.from(0);//三条记录sourceBuilder.size(11);request.source(sourceBuilder);//添加分页信息SearchResponse response = client.search(request, RequestOptions.DEFAULT);//查询匹配SearchHits hits = response.getHits();System.out.println("took:" + response.getTook());System.out.println("是否超时:" + response.isTimedOut());System.out.println("TotalHits:" + hits.getTotalHits());System.out.println("MaxScore:" + hits.getMaxScore());for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}

4.排序

 //年龄排序 倒序,从大到小sourceBuilder.sort("age", SortOrder.DESC);

5.过滤属性

//查询过滤字段String[] excludes = {"age"};//过滤掉age属性String[] includes = {};sourceBuilder.fetchSource(includes,excludes);

6.bool查询

 //创建搜索对象SearchRequest request = new SearchRequest();request.indices("user");//构建查询的请求体SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//必须包含boolQuery.must(QueryBuilders.matchQuery("age",18));//一定不包含boolQuery.mustNot(QueryBuilders.matchQuery("name","lisi"));//可能包含boolQuery.should(QueryBuilders.matchQuery("name","zhangsan"));//查询所有对象sourceBuilder.query(boolQuery);request.source(sourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);

7.范围查询

 //创建搜索对象SearchRequest request = new SearchRequest();request.indices("user");//构建查询的请求体SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//范围查询RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");//大于等于rangeQuery.gte("19");//小于等于rangeQuery.lte("40");//查询所有对象sourceBuilder.query(rangeQuery);request.source(sourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);

8.模糊查询

//创建搜索对象SearchRequest request = new SearchRequest();request.indices("user");//构建查询的请求体SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//模糊查询FuzzyQueryBuilder fuzzyQuery = QueryBuilders.fuzzyQuery("name", "zhangsan");fuzzyQuery.fuzziness(Fuzziness.ONE);sourceBuilder.query(fuzzyQuery);request.source(sourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);

9.高亮查询

//高亮查询SearchRequest request = new SearchRequest("user");//创建查询请求体构建器SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//构建查询方式,高亮查询TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");//设置查询方式sourceBuilder.query(termQueryBuilder);//构建高亮字段HighlightBuilder highlightBuilder = new HighlightBuilder();//设置标签前缀highlightBuilder.preTags("<font color='red'");//设置标签后缀highlightBuilder.postTags("</font>");//设置高亮字段highlightBuilder.field("name");//设置高亮构建对象sourceBuilder.highlighter(highlightBuilder);//设置请求体request.source(sourceBuilder);//客户端发送请求,获取响应对象SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 打印响应结果SearchHits hits = response.getHits();System.out.println("took::"+response.getTook());System.out.println("time_out::"+response.isTimedOut());System.out.println("total::"+hits.getTotalHits());System.out.println("max_s core::"+hits.getMaxScore());System.out.println("hits::::>>");for (SearchHit hit : hits) {String sourceAsString = hit.getSourceAsString();System.out.println(sourceAsString);//打印高亮结果Map<String, HighlightField> highlightFields = hit.getHighlightFields();System.out.println(highlightFields);System.out.println("<<::::");}

 10.聚合查询

 10.1最大年龄

 SearchRequest request = new SearchRequest().indices("user");SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.aggregation(AggregationBuilders.max("maxAge").field("age"));//设置请求体request.source(sourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);//打印响应结果SearchHits hits = response.getHits();System.out.println("hits = " + hits);System.out.println(response);

10.2分组查询

//创建搜索对象SearchRequest request = new SearchRequest().indices("user");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.aggregation(AggregationBuilders.terms("age_groupby").field("age"));//设置请求体request.source(searchSourceBuilder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);System.out.println(response.getHits());System.out.println(response);

http://www.lryc.cn/news/264786.html

相关文章:

  • (1)(1.9) MSP (version 4.2)
  • mysql 表锁 行锁
  • Google 提示:切忌滥用 DORA 指标
  • 2023年全球架构师峰会(ArchSummit北京站2023)-核心PPT资料下载
  • 安全、高效的MySQL DDL解决方案
  • 100GPTS计划-AI学术AcademicRefiner
  • k8s 中部署Jenkins
  • Spring Cloud和Zookeeper的集成,构建高可扩展的分布式系统
  • 【唐山海德教育】安全员c证怎么考
  • MySQL是如何保证数据不丢失的?
  • CUMT--Java复习--泛型与集合
  • Android 权限申请
  • R语言【base】——invisible将控制台的输出模式调整为隐藏,只允许赋值后输出,返回对象的(临时)不可见副本
  • LA@线性代数学习总结@主要对象和问题@思想方法
  • VMware克隆虚拟机
  • C语言中常见的关键字
  • 新型智慧视频监控系统:基于TSINGSEE青犀边缘计算AI视频识别技术的应用
  • 智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 如何使用Docker搭建青龙面板并结合内网穿透工具发布至公网可访问
  • fastjson1.2.24 反序列化漏洞(CVE-2017-18349)分析
  • Linux中history使用(过滤,显示时间,查找)
  • issue阶段的选择电路的实现
  • BearPi Std 板从入门到放弃 - 后天篇(3)(ESP8266透传点灯)
  • 【Linux】macOS下使用scp命令编写脚本上传文件至服务器
  • 难以置信:WINDOWS11真的取消了助记符
  • 使用VSC从零开始Vue.js——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务3:数据可视化
  • 企业直聘招聘人才求职系统招聘会小程序系统源码
  • 大型语言模型:SBERT — Sentence-BERT
  • 高效编写软件测试报告的关键技巧
  • 编写CI/CD自动化部署脚本