springboot2.x集成Elasticsearch7.7.0

一、前言

elasticsearch安装就不做过多介绍了,网上一搜一大堆;最需要注意的就是Elasticsearch与spring版本,防止版本不兼容导致的后续的一系列问题。我这里springboot+spring-data-elasticsearch,他们的版本对照关系可以参照spring-data-elasticsearch官网版本对照。
在这里插入图片描述

二、jar依赖及配置

  • pom.xml
<!--springboot版本-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.5.12</version>
</dependency>
<!--spring-data-elasticsearch版本-->
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>4.2.10</version>
</dependency>
  • application.yml
spring:elasticsearch:rest:uris: **username: **password: **

三、代码实现

3.1 实体类

@Document:对应一个文档记录
indexName:指定索引名称
@Id:用来将对象中id和ES中_id映射
@Field:用来指定ES中的字段对应Mapping
type:用来指定ES中存储类型
analyzer:用来指定使用哪种分词器

@Data
@Document(indexName = "user")
public class User {@Idprivate String id;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String name;@Field(type = FieldType.Date)private Date bir;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String content;
}

3.2 业务代码

@Service
public class EsService {@Autowiredprivate ElasticsearchRestTemplate restTemplate;/*** 初始化es序列*/public boolean initIndex() {IndexOperations indexOperations = restTemplate.indexOps(User.class);if (!indexOperations.exists()) {indexOperations.create();Document mapping = indexOperations.createMapping();indexOperations.putMapping(mapping);return true;}return false;}/*** 初始化es数据**/public void initEsData() {// 查询用户叔叔List<User> list = 查询数据restTemplate.save(list);}/*** 分页查询数据** @param keyword* @param pageNo* @param pageSize* @throws IOException*/public PageInfo<User> search(String keyword, Integer pageNo, Integer pageSize) throws IOException {PageInfo<User> pageInfo = new PageInfo<>();if (pageNo <= 0) {pageNo = 1;}if (pageSize <= 0) {pageSize = 10;}pageInfo.setPageNo(pageNo);pageInfo.setPageSize(pageSize);// 分页数据PageRequest pageRequest = PageRequest.of(pageNo - 1, pageSize, Sort.Direction.DESC, "bir");// 高亮字段HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false).fragmentSize(30).preTags("<span style='color:#799ed9'>").postTags("</span>");// 查询条件QueryStringQueryBuilder queryBuilder = null;if (StringUtils.isNotBlank(keyword)) {keyword = QueryParser.escape(keyword);keyword = "\"" + keyword + "\"";queryBuilder = QueryBuilders.queryStringQuery(keyword).field("name").field("content").analyzer("ik_max_word");}NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(queryBuilder).withPageable(pageRequest).withHighlightBuilder(highlightBuilder).build();SearchHits<User> searchHits = restTemplate.search(query, User.class);long totalHits = searchHits.getTotalHits();if (totalHits <= 0) {return pageInfo;}pageInfo.setCount(totalHits);List<User> list = new ArrayList<>();// 设置高亮数据for (SearchHit<User> hit : searchHits.getSearchHits()) {User content = hit.getContent();JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(content));Map<String, List<String>> highlightFields = hit.getHighlightFields();if (highlightFields.isEmpty()) {list.add(content);continue;}for (Map.Entry<String, List<String>> entry : highlightFields.entrySet()) {StringBuffer stringBuffer = new StringBuffer();for (int i = 0; i < entry.getValue().size(); i++) {if (i > 0) {stringBuffer.append(",");}stringBuffer.append(entry.getValue().get(i));}jsonObject.put(entry.getKey(), stringBuffer.toString());}content = JSONObject.parseObject(jsonObject.toJSONString(), User.class);list.add(content);}pageInfo.setList(list);return pageInfo;}
}

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

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

相关文章

vue2后台管理项目

一:项目准备 1)拉取模板代码 远程仓库复制到本地仓库. 2)安装后的项目 路径 code 文件夹 会打开vscode的文件夹. 3)安装vetur和eslint插件可以保存时自动修改不规范的地方. 4)App内有一级路由,路由组件导入如果是layout架子,会导入的是文件夹下的index.js没有则导入index.v…

智能电视遇险?海信、TCL、小米“上下求索”

众所周知&#xff0c;智能化已经成为各行各业的发展新方向&#xff0c;家电行业更是早早掀起了智能化浪潮&#xff0c;越来越多的智能家电产品涌现出来。在客厅场景&#xff0c;电视毫无疑问是众多家电中的C位&#xff0c;而在智能化浪潮的助推下&#xff0c;电视这一产品同样开…

有什么实用的还原试卷的app免费?6个软件教你快速进行还原试卷

有什么实用的还原试卷的app免费&#xff1f;6个软件教你快速进行还原试卷 在现代化的教学环境中&#xff0c;使用数字化工具进行试卷还原变得愈发重要。以下是六个实用的、免费的应用程序&#xff0c;它们为还原试卷提供了便捷的解决方案。 FunAI&#xff1a; 这款应用程序可…

SD-WAN提升Microsoft 365用户体验

随着数字化时代的到来&#xff0c;SaaS应用如Microsoft 365已经成为各类企业的主流选择。在这一趋势下&#xff0c;企业需要以更加灵活、高效的方式使用Microsoft 365&#xff0c;以满足日益增长的业务需求。而传统的网络基础设施可能无法满足这一需求&#xff0c;因此&#xf…

指针的奥秘(三):数组指针+函数指针(+typedef)+函数数组指针+转移表

指针 一.数组指针1.数组指针变量是什么&#xff1f;2.指针数组和数组指针区别和口诀3.数组指针变量怎么初始化4.二维数组传参的本质 二.函数指针1.函数指针变量的创建2.函数指针变量的使用3.两段有趣的代码1.( *( void ( * )( ) )0 ) ( );2.void( *signle(int, void( * )(int) …

TCP协议的确认应答机制

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;它在网络通信中扮演着至关重要的角色。其中&#xff0c;确认应答机制是TCP协议中的一个核心概念&#xff0c;它确保了数据的可靠传输。本文将详细介绍J…

LeetCode hot100-34-G

23. 合并 K 个升序链表请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。这题没做出来 其实有个很自然的想法应该想到的&#xff0c;也就是官方解法一 两个升序链表合并这个应该会。多个的困难就是没办法分别用指针指向每个链表头&#xff0c;然后比较大小。其…

【QA】Java集合常用的函数

文章目录 前言Collection接口通用函数 | Collections工具类通用函数 | List接口 Set接口List接口ArrayListLinkedList Set接口TreeSetHashSetLinkedHashSet Map接口通用函数TreeMapHashMapLinkedHashMap 前言 本文介绍Java集合中常用的函数。 Collection接口 通用函数 | Co…

js设计模式--发布订阅者模式

概述 发布订阅者模式用于处理对象之间的事件通信&#xff0c;该模式涉及两个主要角色&#xff1a;发布者&#xff08;Publisher&#xff09;和订阅者&#xff08;Subscriber&#xff09; 发布者维护一个事件列表&#xff0c;并在事件发生时通知所有已注册的订阅者。订阅者可以…

数据结构解构方法

遇到问题后端返回data{其中对应每一个item的checked和descrip} { "code": 200, "msg": "请求成功", "time": , "data": { "id": "", "measureFileDesc": n…

【C++风云录】拓展视野:C++工具库在可穿戴技术中的应用分析

创新引擎&#xff1a;如何运用C工具库推动生物医学工程进步 前言 本文将介绍和讨论六种在生物医学工程和可穿戴技术中应用广泛的开源C库。这些库包括OpenBCI&#xff0c;PyCortex&#xff0c;TensorFlow&#xff0c;Dlib&#xff0c;Armadillo和Boost&#xff0c;它们在脑机接…

WP All Import Pro插件下载 - 一键导入,无限可能

在当今快节奏的数字时代&#xff0c;网站内容的更新和管理是每个网站管理员和开发者的日常工作。但是&#xff0c;传统的手动更新方法不仅耗时&#xff0c;而且容易出错。现在&#xff0c;有了WP All Import Pro&#xff0c;这一切都将改变。 WP All Import Pro 是一款专为Wor…

C#连接MySql数据库 (ASP.NET API)

main方法调用连接 using System; using MySql.Data.MySqlClient; class Program { static void Main(string[] args) { string connectionString "serverlocalhost;database***;username***;password****"; using (MySqlConnection connec…

ABAP ZCL_EXCEL 实际用的案例 对账单

ABAP ZCL_EXCEL 实际用的案例 FORM GETITEMSANDOUTPUT USING PGS_HEAD TYPE GSHEAD.DATA:FILENAME TYPE STRING.DATA:LKUNNR TYPE KNA1-KUNNR.DATA:PROW TYPE I.DATA:LSDATE TYPE STRING.DATA:SUMXSJE TYPE DMBTR,ZYMYE TYPE DMBTR, "月末余额SUMBYXSYE TYPE DMBT…

全新神经网络架构KAN——本文用于学习与探索

论文地址&#xff1a;https://arxiv.org/pdf/2404.19756 Github&#xff1a;GitHub - KindXiaoming/pykan: Kolmogorov Arnold Networks 文档说明&#xff1a;Welcome to Kolmogorov Arnold Network (KAN) documentation! — Kolmogorov Arnold Network documentation 本文仅…

Java 反射动态代理

反射 Java反射是一种强大的编程机制&#xff0c;它允许程序在运行时检查或修改对象和类的行为。具体来说&#xff0c;反射机制提供了以下功能&#xff1a; 类的动态加载&#xff1a;可以在运行时加载一个只知道名称的类&#xff0c;并创建该类的实例。获取类的详细信息&#…

二手交易系统基于Uniapp+FastAdmin+ThinkPHP(源码搭建/上线/运营/售后/更新)

​一款基于UniappFastAdminThinkPHP开发的二手交易系统&#xff0c;卖家可以发布二手信息&#xff0c;买家可以在线询价&#xff0c;支持在线聊天(高级授权)&#xff0c;在线购买支付&#xff0c;支持发布高价回收(高级授权)信息。自带社交板块&#xff0c;用户可以发布帖子、加…

Prompt|Kimi高阶技巧,99%的人都不知道

大家好&#xff0c;我是无界生长。 今天分享一条咒语&#xff0c;轻松让Kimi帮你生成流程图&#xff0c;学会了的话&#xff0c;点赞收藏起来吧&#xff01; 效果展示 我们演示一下让kimi帮忙绘制 关注微信公众号“无界生长”的流程图&#xff0c;最终效果图如下所示 效果还不…

针对 % 号 | 引起的 不安全情况

把网站开放的课程都检索下来了 一、情况1 org.apache.tomcat.util.http.Parameters processParameters 信息: Character decoding failed. Parameter [Mac] with value [%%%] has been ignored. Note that the name and value quoted here may be corrupted due to the failed…

Kubernetes Cluster IP,Node IP,Pod IP间通信原理解析

目录 1、Cluster IP2、Node IP3、NodePort4、Pod IP5、LoadBalancer6、三种IP间通信6.1、Pod IP 与 Pod IP 通信6.2、Pod IP 与 Cluster IP 通信6.3、Node IP 与 Pod IP 通信6.4、Node IP 与 Cluster IP 7、YAML 示例7.1、ClusterIP Service7.2、LoadBalancer Service 1、Clust…