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.hqwc.cn/news/691318.html

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

相关文章

安全继电器的使用和作用

目录 一、什么是安全继电器 二、安全继电器的接线方式 三、注意事项 四、总结 一、什么是安全继电器 安全继电器是由多个继电器与硬件电路组合而成的一种模块&#xff0c;是一种电路组成单元&#xff0c;其目的是要提高安全因素。完整点说&#xff0c;应该叫成安全继电器模…

基于单片机的温度控制系统设计(51基础版)-设计说明书

本论文设计了一种基于51单片机的温度控制系统&#xff0c;该系统具备以下主要功能&#xff1a;首先&#xff0c;通过温度传感器实时检测环境温湿度&#xff0c;以获取准确的温度数值。其次&#xff0c;通过按键设置温度阈值&#xff0c;用户可以根据需求自行调整控制温度的上限…

重写muduo之Buffer

1、 Buffer.h Buffer封装 是一个缓冲区 prependable bytesreadable byteswritable bytes8字节长度&#xff08;解决粘包问题&#xff09;读数据写数据 根据下标进行读或者写 3个成员变量&#xff1a;数组&#xff0c;数据可读的下标&#xff0c;数据可写的下标 #pragma once#…

免费思维13招之六:功能型思维

免费思维13招之六&#xff1a;功能型思维 这节来学习一下免费思维的另一大思维——功能型思维。 这个思维通俗易懂。功能型思维是指将其他产品的功能在我们的产品上进行体现&#xff0c;让客户获得免费的使用。 也就是说&#xff0c;客户买了你的产品&#xff0c;却可以免费得…

常见算法策略

前言 算法策略是指在解决问题或完成任务时所采用的方法、技巧或步骤的总称。 在设计算法时&#xff0c;通常会考虑多种策略&#xff0c;并选择最适合特定问题的策略来实现算法的设计和优化。 算法策略比较 动态规划 动态规划介绍入口

基于LLM的自行车道CAD

LLM&#xff08;大型语言模型&#xff09;是强大的工具。对于许多人来说&#xff0c;用语言表达愿望通常比浏览复杂的 GUI 更简单。 1、系统简介和环境搭建 urb-x.ch&#xff0c;这是一家专门从事自行车道建设的公司。轨道采用模块化构建块进行独特设计&#xff0c;可以通过多…

一个优秀 Maven 项目,各 Model 间最佳继承设计方案

1.单一职责原则 (Single Responsibility Principle): 每个模块应该专注于执行一个清晰且明确定义的功能&#xff0c;遵循单一职责原则&#xff0c;以降低模块的复杂性。 2.高内聚性 (High Cohesion): 模块内的组件和类应该紧密相关&#xff0c;共同实现模块的目标。高内聚性…

网安面经之SSRF漏洞

一、ssrf漏洞 1、ssrf原理&#xff1f;危害&#xff1f;修复&#xff08;防御&#xff09;&#xff1f; 原理&#xff1a;SSRF就是服务器端请求伪造漏洞、它是一种由攻击者构造&#xff0c;由服务端发起请求的一个网络攻击&#xff0c;一般用来在外网探测或攻击内网服务&…

【PHP【实战版】系统性学习】——登录注册页面的教程,让编写PHP注册变成一个简单的事情

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

iOS 安装cocoapds

注意 CocoaPods安装是基于ruby环境的&#xff0c;所以要安装CocoaPods先要安装Ruby环境&#xff0c;国内不能直接安装&#xff0c;只能通过VPN或淘宝的Ruby镜像来访问。 安装过程 gem sources --remove https://rubygems.org/ ** (注意是两个“-”&#xff0c;否则会移除失败) …

Python的while循环

目录 while循环的结构 示例 关键字 break continue while循环的结构 while condition&#xff08;循环条件&#xff09;: # 循环的内容 循环内容的执行与结束需要通过循环条件控制。 在执行循环之前需要设立一个循环条件的初始值&#xff0c;以便while循环体判断循环条件。…

社交媒体数据恢复:密聊猫

一、概述 密聊猫是一款提供多种优质体验的手机社交聊天软件。通过这款软件&#xff0c;用户可以享受到多种不同的乐趣体验&#xff0c;如真人在线匹配、真实的交友体验等。同时&#xff0c;密聊猫也提供了数据恢复功能&#xff0c;帮助用户找回丢失的数据。 二、数据恢复步骤…