SpringBoot2.x RestClient 操作ElasticSearch 7.x

2024-01-09 21:08

本文主要是介绍SpringBoot2.x RestClient 操作ElasticSearch 7.x,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SpringBoot2.x RestClient 操作ElasticSearch 7.x

  • 本地环境
  • ES新版和老板差异
    • 7.6.2 版本
    • 老版本
  • 使用 RestClient
    • 导入依赖
    • yml配置
    • rest新建索引文档
    • 判断索引是否存在
    • 查找
    • 高亮

本地环境

Spring Boot 2.2.6
Elasticsearch 7.6.2
写这个文章的原因是
“The well known TransportClient is deprecated as of Elasticsearch 7 and will be removed in Elasticsearch 8. (see the Elasticsearch documentation). Spring Data Elasticsearch will support the TransportClient as long as it is available in the used Elasticsearch version.
We strongly recommend to use the High Level REST Client instead of the TransportClient.”
但是网上关于RestClient的资料却很少

ES新版和老板差异

先说建立索引,新版不允许带有type名,我们通过代码对比,代码很简洁

7.6.2 版本

PUT http://localhost:9200/test/
{"mappings":{"properties":{"id":{"type": "long","index": true},"title":{"type": "text"}}}
}

老版本

PUT http://localhost:9200/test/
{"mappings":{"lalala":{"properties":{"id":{"type": "long","index": true},"title":{"type": "text"}}}}
}

还有常用的一点:minimum_match 新版本需要使用 minimum_should_match

使用 RestClient

导入依赖

导入依赖 这个不用说了,以前还需要Jest 包

    	<properties>.......<!--自定义elasticsearch.version版本--><!--其实不自定义默认的6.8x也可以使用我们不自定义看看连接7.6.2版本会不会出问题--><!--<elasticsearch.version>7.6.2</elasticsearch.version>--></properties><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>

yml配置

为了和老版本对比jest我没有去掉,事实上jest的uris明确表明已过时

spring:elasticsearch:jest:uris: http://localhost:9200rest:uris: http://localhost:9200

rest新建索引文档

  • 注意:代码中的JestEntity只是一个普通的实体类,你们可以自己写一个,并不是Jest包中的东西
    下面的代码我没有使用CreateIndexRequest,而是直接创建文档了
	@Autowiredprivate RestHighLevelClient restClient;@Testpublic void testRestCreate(){JestEntity entity = new JestEntity();entity.setId(1);entity.setTitle("我是文章标题");ObjectMapper mapper=new ObjectMapper();String source = mapper.writeValueAsString(entity);// 1. 建立IndexRequest//注意这里的type 事实上在es7中就是文档,type已经被弃用//这里的source是个json,我懒得引入fastjson用jackson做了//如果在xml修改了es版本号,这里可以只写2个变量,index和idIndexRequest request = new IndexRequest("test", "_doc", "1").source(source, XContentType.JSON).setRefreshPolicy(IMMEDIATE);//发送请求try {IndexResponse res = restClient.index(request, RequestOptions.DEFAULT);System.out.println(res);} catch (IOException e) {e.printStackTrace();}// 异步方式/*ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>() {@Overridepublic void onResponse(IndexResponse indexResponse) {System.out.println("调用完成");System.out.println(indexResponse);}@Overridepublic void onFailure(Exception e) {e.printStackTrace();}};restClient.indexAsync(request,RequestOptions.DEFAULT,listener);*/}

判断索引是否存在

	@Testpublic void testRestExists(){GetIndexRequest request = new GetIndexRequest("test");//注意 我这里用的是indices方法,故意换个方法,让大家了解一下CreateIndexResponse res = restClient.indices().exists(request,RequestOptions.DEFAULT);System.out.println(res);}

查找

	@Testpublic void testRestSearch(){SearchRequest searchRequest = new SearchRequest("test");//ES7 不需要types 是为了兼容老版本的东西//如果写了会抛异常并且卡死在这//searchRequest.types("_doc"); SearchSourceBuilder searchSource = new SearchSourceBuilder();//匹配所有//searchSource.query(QueryBuilders.matchAllQuery());//只匹配titlesearchSource.query(QueryBuilders.matchQuery("title", "文章"));searchRequest.source(searchSource);try {SearchResponse res = restClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println(res);} catch (IOException e) {e.printStackTrace();}}

高亮

highlightBuilder.field 新版本必须设置,否则会获取不到高亮内容

@Testpublic void testRestSearch() throws IOException {//创建搜索请求SearchRequest searchRequest = new SearchRequest("Hoola");//searchRequest.types("_doc"); ES7 不需要 是为了兼容老版本的东西//创建搜索源SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//创建高亮并设置fieldHighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("tag").field("title");//不设置会获取不到highlightBuilder.preTags("<span style='color:red'>");highlightBuilder.postTags("</span>");//设置搜索条件,故意写的复杂一些,让你们看看restClient的搜索searchSourceBuilder.query(QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("tag", "抠脚 大汉")).should(QueryBuilders.matchQuery("title", "蛇皮 香蕉 象拔蚌")).minimumShouldMatch(1)).highlighter(highlightBuilder).from(0).size(10);//绑定搜索源searchRequest.source(searchSourceBuilder);SearchResponse res = restClient.search(searchRequest, RequestOptions.DEFAULT);//获取内容for (SearchHit hit:res.getHits().getHits()){Map<String, Object> sourceAsMap = hit.getSourceAsMap();Map<String, HighlightField> highlightFields = hit.getHighlightFields();//判断高亮是否存在,存在就替换到map中去if (highlightFields.get("title")!=null){sourceAsMap.put("title",highlightFields.get("title").fragments());}if (highlightFields.get("tag")!=null){sourceAsMap.put("tag",highlightFields.get("tag").fragments());}JestEntity jestEntity = new JestEntity();try {//map数据迁移到实体对象里。BeanUtils.populate(jestEntity, sourceAsMap);System.out.println(jestEntity);} catch (IllegalAccessException|InvocationTargetException e) {e.printStackTrace();} }}

这篇关于SpringBoot2.x RestClient 操作ElasticSearch 7.x的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588435

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化