springboot-2.7.3+ES-7.10.0

跟着官网走,能干99。一年几次变,次次不一样。刚部署好ES-6.8,又买阿里云Es-7.10.0根本忙不完。

做为JDK1.8最后一个版本。今天就拿新技术部署一套。致辞:大家以后就用这套好了。别轻易触发springboot3.0了

学习无止境:Dependency Versions

一springboot干货:

pom文件配置:

 <elasticsearch.version>7.10.0</elasticsearch.version><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${elasticsearch.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>${elasticsearch.version}</version></dependency>

一。直接干底层模版接口代码:

/*** description: Es基础功能组件**/
public interface ElasticsearchTemplate<T,M> {/*** 通过Low Level REST Client 查询* @param request 原生查询对象*/public Response request(Request request) throws Exception;/*** 新增索引* @param t 索引pojo*/public boolean save(T t) throws Exception;/*** 新增索引(路由方式)* @param t 索引pojo* @param routing 路由信息(默认路由为索引数据_id)*/public boolean save(T t,String routing) throws Exception;/*** 新增索引集合* @param list 索引pojo集合*/public BulkResponse save(List<T> list) throws Exception;/*** 新增索引集合(分批方式,提升性能,防止es服务内存溢出,每批默认5000条数据)* @param list 索引pojo集合*/public BulkResponse[] saveBatch(List<T> list) throws Exception;/*** 更新索引集合* @param list 索引pojo集合* @return* @throws Exception*/public BulkResponse bulkUpdate(List<T> list) throws Exception;
}

二。模版接口实现类:

@Component
public class ElasticsearchTemplateImpl<T, M> implements ElasticsearchTemplate<T, M> {private Logger logger = LoggerFactory.getLogger(this.getClass());@AutowiredRestHighLevelClient client;@AutowiredElasticsearchIndex elasticsearchIndex;@Overridepublic Response request(Request request) throws Exception {Response response = client.getLowLevelClient().performRequest(request);return response;}@Overridepublic boolean save(T t) throws Exception {return save(t,null);}@Overridepublic boolean save(T t, String routing) throws Exception {MetaData metaData = elasticsearchIndex.getMetaData(t.getClass());String indexname = metaData.getIndexname();String id = Tools.getESId(t);IndexRequest indexRequest=new IndexRequest(indexname);;if (StringUtils.hasText(id)) {indexRequest.id(id);}JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(t));indexRequest.source(jsonObject);if(StringUtils.hasText(routing)){indexRequest.routing(routing);}IndexResponse indexResponse = null;indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {logger.info("INDEX CREATE SUCCESS");elasticsearchIndex.rollover(t.getClass(),true);} else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {logger.info("INDEX UPDATE SUCCESS");} else {return false;}return true;}
}

三 。对外客户端提供接口:

/*** program: 对客户端提供api* description:**/
public interface ESCRepository<T,M> {/*** 通过Low Level REST Client 查询*/public Response request(Request request) throws Exception;/*** 新增索引* @param t*/public boolean save(T t) throws Exception;/*** 新增索引集合* @param list*/public BulkResponse save(List<T> list) throws Exception;/*** 按照有值字段更新索引* @param t*/public boolean update(T t) throws Exception;
}

四。对ES提供实现类:

/*** program: ESCRepository对外提供统一接口**/
public class SimpleESCRepository<T,M> implements ESCRepository<T,M> {private Class<T> domainClass;private Class<M> idClass;private ApplicationContext applicationContext;private ElasticsearchTemplate elasticsearchTemplate = null;public SimpleESCRepository(ApplicationContext applicationContext){this.applicationContext = applicationContext;}private ElasticsearchTemplate getElasticsearchTemplate(){return applicationContext.getBean(ElasticsearchTemplate.class);}@Overridepublic Response request(Request request) throws Exception {return getElasticsearchTemplate().request(request);}@Overridepublic boolean save(T o) throws Exception {return getElasticsearchTemplate().save(o);}@Overridepublic BulkResponse save(List<T> list) throws Exception {return getElasticsearchTemplate().save(list);}
}@Overridepublic boolean update(T t) throws Exception {return getElasticsearchTemplate().update(t);}@Overridepublic boolean updateCover(T t) throws Exception {return getElasticsearchTemplate().updateCover(t);}

写到现在终于把底层封装完毕。客户端如何调用

客户端实现接口:

public interface IndexRepository extends ESCRepository<IndexEntity,String> {
}

这就完了,你答对了,至此springboot+ES已经封装完成

直接controller接口测试:

    @Resourceprivate IndexRepository indexRepository;@GetMapping("/demo/add")public String add() throws Exception {IndexEntity indexEntity = new IndexEntity ();indexEntity .setProposal_no("1");indexEntity .setAppli_name("a1");indexEntity .setRisk_code("aa1");indexEntity .setSum_premium(1);indexDemoRepository.save(indexEntity );return "新增成功";}@GetMapping("/demo/query")public List<IndexDemo> query() throws Exception {List<IndexDemo> search = indexDemoRepository.search(QueryBuilders.matchAllQuery());return search;}

一套掌法打出。查询结果到手

[{"proposal_no": "1","risk_code": "aa1","risk_name": null,"business_nature": null,"business_nature_name": null,"appli_code": null,"appli_name": "a1","insured_code": null,"insured_name": null,"operate_date": null,"operate_date_format": null,"start_date": null,"end_date": null,"sum_amount": 0.0,"sum_premium": 1.0,"com_code": null}
]

能欣赏到这里说明你对ES的理解钢圈了。需要源码的欢迎加我V。10元

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/179153.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决【spring boot】Process finished with exit code 0的问题

文章目录 1. 复现错误2. 分析错误3. 解决问题 1. 复现错误 今天从https://start.spring.io下载配置好的spring boot项目&#xff1a; 启动后却报出如下错误&#xff1a; 即Process finished with exit code 0 2. 分析错误 Process finished with exit code 0翻译成中文进程已完…

Flask-SQLAlchemy事件钩子介绍

一、前言 前几天在搜资料的时候无意中看到有介绍SQLAlchemy触发器&#xff0c;当时感觉挺奇怪的&#xff0c;触发器不是数据库层面的概念吗&#xff0c;怎么flask-SQLAlchemy这个ORM框架会有这玩意。 二、SQLAlchemy触发器一个简单例子 考虑到效率博客表中有两个字段&#xf…

用友U8+ CRM任意文件上传漏洞

用友U8 CRM任意文件上传漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: body"用友U8CRM" 漏洞复现1. 构造poc2. 复现3. 访问webshell 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平。 任何人不得利用该…

精品Python的旅游数据可视化大屏平台-爬虫-景点门票

《[含文档PPT源码等]精品基于Python的旅游数据可视化平台-爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Flask 前端技术&…

Flask——接口路由技术

接口路由技术 一、Flask 简介1、环境安装&#xff1a;2、一个最小的应用3、两种运行方式 二、定义路由1、普通路由2、动态路由3、限定类型4、地址尾部的“/” 三、请求与响应-请求方法四、请求与响应-处理请求数据1、request的常用属性/方法2、get 请求参数3、json 请求4、表单…

微信小程序-form表单-获取用户输入文本框的值

微信小程序-form表单-获取用户输入文本框的值 data: {userName: ,userPwd:""},//获取用户输入的用户名 userNameInput:function(e) {this.setData({userName: e.detail.value}) }, passWdInput:function(e) {this.setData({userPwd: e.detail.value}) }, //获取用户输…

【信息安全原理】——IP及路由安全(学习笔记)

目录 &#x1f552; 1. IPv4协议及其安全性分析&#x1f552; 2. IPsec&#xff08;IP Security&#xff09;&#x1f558; 2.1 IPsec安全策略&#x1f564; 2.1.1 安全关联&#xff08;Security Association, SA&#xff09;&#x1f564; 2.1.2 安全策略&#xff08;Security…

AI“走深向实”,蚂蚁蚁盾在云栖大会发布实体产业「知识交互建模引擎」

数字化起步晚、数据分散稀疏、专业壁垒高、行业知识依赖「老师傅」&#xff0c;是很多传统产业智能化发展面临的难题。2023年云栖大会上&#xff0c;蚂蚁集团安全科技品牌蚁盾发布“知识交互建模引擎”&#xff0c;将实体产业知识与AI模型有机结合&#xff0c;助力企业最快10分…

2024上海国际人工智能展(CSITF)以“技术,让生活更精彩”为核心理念,以“创新驱动发展,保护知识产权,促进技术贸易”为主题

2024上海国际人工智能展&#xff08;CSITF&#xff09; China&#xff08;Shanghai&#xff09;International Technology Fair 时间:2024年6月12-14日 地点:上海世博展览馆 主办单位 中华人民共和国商务部 中华人民共和国科学技术部 中华人民共和国国家知识产权局 上海市…

vue需求:实现签章/签字在页面上自由定位的功能(本质:元素在页面上的拖拽)

目录 第一章 效果展示 第二章 了解工具 2.1 draggable 2.1.1 了解draggable 2.1.2 draggable方法 2.1.3 利用例子理解方法 第三章 效果实现 3.1 实现思路 3.2 代码实现 3.2.1 涉及到的点 3.2.2 源代 第一章 效果展示 效果描述&#xff1a;通过点击左边栏的签名和…

如何在idea中使用maven搭建tomcat环境

目录 一、创建maven项目 二、完善代码结构 三、引入依赖和插件 四、启动tomcat&#xff0c;运行项目 &#xff08;1&#xff09;点击添加配置 &#xff08;2&#xff09;点击左上角的加号&#xff0c;选择maven &#xff08;3&#xff09;输入运行命令 五、验证 一、创建…

小红书koc怎么选,koc达人筛选指南!

小红书说到底就是一个用户与用户分享的平台&#xff0c;自然那些本身就具有一定能量的用户更加被注重&#xff0c;也就是KOC。今天为大家分享一下小红书koc怎么选&#xff0c;koc达人筛选指南&#xff01; 1、首先了解KOC的特点 KOC是指具有一定影响力&#xff0c;且在特定领域…

【向生活低头】win7打印机共享给win11使用,win11无法连接问题的解决

打印机是跟win7的电脑连接的&#xff0c;然后试了很多方法&#xff0c;win11都没法添加该打印机去使用。 网上的方法乱七八糟啥都有&#xff0c;但试了以后&#xff0c;发现基本没什么用。 刚刚发现知乎上的一个回答是有用的&#xff0c;这里做记录以备后用。 1.打开控制面板的…

家庭私人影院 - Windows搭建Emby媒体库服务器并远程访问 「无公网IP」

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

八、W5100S/W5500+RP2040树莓派Pico<DNS>

文章目录 1 前言2 协议简介2.1 什么是DNS2.2 DNS的优点2.3 DNS工作原理2.4 应用场景 3 WIZnet以太网芯片4 DNS网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 烧录验证 5 注意事项6 相关链接 1 前言 为了更好地支持应用程序的性能和可用性…

微信小程序overflow-x超出部分样式不渲染

把display:flex改成display:inline-flex&#xff0c; 将对象作为内联块级弹性伸缩盒显示&#xff0c; 类似与是子元素将父元素撑开&#xff0c;样式就显示出来了

上线项目问题——无法加载响应数据

目录 无法加载响应数据解决 无法加载响应数据 上线项目时 改用服务器上的redis和MySQL 出现请求能请求到后端&#xff0c;后端也能正常返回数据&#xff0c;但是在前端页面会显示 以为是跨域问题&#xff0c;但是环境还在本地&#xff0c;排除跨域问题以为是服务器问题&#…

界面控件DevExpress WPF Gauge组件 - 轻松实现个性化商业仪表盘

DevExpress WPF Gauge&#xff08;仪表&#xff09;控件包含了多种圆形仪表类型、水平和垂直线性仪表、分段和矩阵数字仪表以及状态指示器&#xff0c;同时还具有最终用户交互性的集成支持。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至…

免费(daoban)gpt,同时去除广告

一. 内容简介 免费(daoban)gpt&#xff0c;同时去除广告&#xff0c;https://chat18.aichatos.xyz/&#xff0c;也可当gpt用&#xff0c;就是有点广告&#xff0c;大家也可以支持一下 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 …

css中flexbox和grid的区别

css中flexbox和grid的区别 我们是不是被那些不会按预期排列的元素所影响&#xff1f;这篇文章我们将深入探讨css中flexbox和grid的布局。通过了解他们的主要差异&#xff0c;我们会发现这些布局是如何改变我们网站的风格。 理解CSS布局 css布局是网页设计的一个重要方面&…