Java整合ElasticSearch8.13
1、引入Jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2、配置ES连接信息
spring:elasticsearch:# 地址uris: http://xxx:9200# 用户名username: xxx# 密码password: xxx# 连接超时时间connection-timeout: 5s# 数据读写超时时间socket-timeout: 10s# 如果Elasticsearch API路径有前缀,可以在此指定#path-prefix:logging:level:# 输出es的查询参数(调试用)tracer: trace
3、实际使用案例
@Document:
1、indexName:指定实体类对应的Elasticsearch索引名称,如 indexName = "users"
@Field:
1、type:映射类型,包括text、boolean、date、Integer等
2、analyzer:分析器,用来指定分析类型,例如使用
ik_max_word的分析器进行文本分析,
@Data
@Document(indexName = "user")
public class User {@Idprivate String id;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String name;@Field(type = FieldType.Integer)private int age;public User(String id, String name, int age) {this.id = id;this.name = name;this.age = age;}
}
public interface UserRepository extends ElasticsearchRepository<User, String> {// 可以添加自定义查询方法,但此处无需额外定义,仅使用基础CRUD即可
}
@Testvoid saveAll() {List<User> usersToImport = Arrays.asList(new User("user5", "Jack", 18),new User("user6", "Amy", 19));userRepository.saveAll(usersToImport);}
4、ElasticsearchRepository已经实现的基本CRUD和分页查询(也可直接使用ElasticsearchTemplate)
T entity: 要搜索相似实体的参照实体。Elasticsearch会基于此实体的某些属性(见下文)来寻找相似的其他实体。@Nullable String[] fields: 可选参数,表示用于计算相似度的实体属性列表。如果未指定,可能默认使用所有已索引的文本字段。这些字段通常包含具有相似性计算意义的文本内容。Pageable pageable: 分页参数,用于控制查询结果的分页和排序。包含页码、每页大小以及排序规则等信息。⚠️:
searchSimilar方法的核心功能是利用Elasticsearch的相似度搜索(如More Like This查询)来找出与给定实体在指定字段上具有较高相似度的其他实体。这种方法在推荐系统、相关文档检索、异常检测等领域非常有用。只需在自己的Repository接口中继承ElasticsearchRepository,就可以直接使用searchSimilar方法进行相似度搜索,而无需手动编写复杂的Elasticsearch查询DSL。需要注意的是,实际使用时,确保参照实体的指定字段已正确映射到Elasticsearch并启用相似度计算功能(如使用合适的分析器、设置similarity属性等)。同时,ElasticsearchRepository及其提供的方法通常需要与Spring Data Elasticsearch的其他组件(如ElasticsearchTemplate、ElasticsearchConverter等)以及相应的配置一起使用,才能充分发挥其功能。@NoRepositoryBean
public interface ElasticsearchRepository<T, ID> extends PagingAndSortingRepository<T, ID>, CrudRepository<T, ID> {Page<T> searchSimilar(T entity, @Nullable String[] fields, Pageable pageable);
}
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends Repository<T, ID> {//该方法用于查询所有实体,并按照指定的排序规则进行排序。//参数Sort代表排序条件,可以包含一个或多个排序字段及其排序方向(升序或降序)。//返回值是按指定排序规则排列的所有实体的迭代器。Iterable<T> findAll(Sort sort);/**该方法用于分页查询所有实体,并可选地进行排序。参数Pageable封装了分页和排序的相关信息,包括:页码 (page):当前请求的页数,从0开始计数。每页大小 (size):每页包含的实体数量。排序 (Sort):类似于上一个方法中的Sort参数,定义了排序字段和排序方向。返回值是Page<T>类型,它不仅包含了当前请求页的所有实体(可通过getContent()方法获取),还提供了 分页相关的元数据,如:总页数 (totalPages):基于总实体数和每页大小计算得出的总页数。总实体数 (totalElements):数据库中符合条件的实体总数。是否有下一页 (hasNext):判断是否还有下一页数据可供查询。是否有上一页 (hasPrevious):判断是否还有上一页数据可供查询。当前页码 (number):返回当前请求的页码。每页大小 (size):返回当前请求的每页大小。排序信息 (sort):返回当前请求的排序条件。*/Page<T> findAll(Pageable pageable);}
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {//保存或更新一个实体。如果传入的实体对象有ID(即主键),且在数据库中已存在对应记录,则执行更新操作;否则插入新记录。返回值是保存后(可能经过转换或生成ID)的实体对象。<S extends T> S save(S entity);//批量保存或更新多个实体。对于每个实体,执行与save(S entity)相同的操作。返回值是包含所有保存后实体的迭代器<S extends T> Iterable<S> saveAll(Iterable<S> entities);//根据给定的ID查找实体。如果找到匹配的实体,返回封装在Optional中的实体对象;否则返回空OptionalOptional<T> findById(ID id);//检查是否存在具有指定ID的实体。如果存在,返回true;否则返回falseboolean existsById(ID id);//返回所有实体的集合。通常仅在数据量较小的情况下使用,否则可能导致内存溢出Iterable<T> findAll();//根据一组ID查找对应的实体集合。返回包含所有找到实体的迭代器Iterable<T> findAllById(Iterable<ID> ids);//返回实体总数long count();//根据指定ID删除对应的实体void deleteById(ID id);//删除传入的实体对象所对应的数据库记录void delete(T entity);//根据ID批量删除void deleteAllById(Iterable<? extends ID> ids);//批量删除传入的实体对象集合所对应的数据库记录void deleteAll(Iterable<? extends T> entities);//删除所有实体,清空整个实体表或集合void deleteAll();
}
关于ES的详解:这些年背过的面试题 —— ES篇-CSDN博客
相关文章:
Java整合ElasticSearch8.13
1、引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 2、配置ES连接信息 spring:elasticsearch:# 地址uris: http://xxx:9200# 用户…...
2.网络编程-HTTP和HTTPS
目录 HTTP介绍 HTTP协议主要组成部分 GET 和 POST有什么区别 常见的 HTTP 状态码有哪些 http状态码100 HTTP1.1 和 HTTP1.0 的区别有哪些 HTTPS 和 HTTP 的区别是什么 HTTP2 和 HTTP1.1 的区别是什么 HTTP3 和 HTTP2 的区别是什么 HTTPS的请求过程 对称加密和非对称…...
MTK i500p AIoT解决方案
一、方案概述 i500p是一款强大而高效的AIoT平台,专为便携式、家用或商用物联网应用而设计,这些应用通常需要大量的边缘计算,需要强大的多媒体功能和多任务操作系统。该平台集成了Arm Cortex-A73 和 Cortex-A53 的四核集群,工作频…...
ES入门十四:分词器
我们存储到ES中数据大致分为以下两种: 全文本,例如文章内容、通知内容精确值,如实体Id 在对这两类值进行查询的时候,精确值类型会比较它们的二进制,其结果只有相等或者不想等。而对全文本类型进行等值比较是不太实现…...
汇编——SSE打包整数
SSE也可以进行整数向量的加法,示例如下: ;sse_integer.asm extern printfsection .datadummy db 13 align 16pdivector1 dd 1dd 2dd 3dd 4pdivector2 dd 5dd 6dd 7dd 8fmt1 db "Packed Integer Vector 1: %d, %d, %d, %d",…...
动态规划(2)
动态规划(2) 文章目录 动态规划(2)1、聪明的寻宝人2、基因检测3、药剂稀释4、找相似串 1、聪明的寻宝人 #include <iostream> using namespace std; void MaxValue(int values[], int weights[], int n, int m) {int dp[21…...
JetBrains IDE 2024.1 发布 - 开发者工具
JetBrains IDE 2024.1 (macOS, Linux, Windows) - 开发者工具 CLion, DataGrip, DataSpell, Fleet, GoLand, IntelliJ IDEA, PhpStorm, PyCharm, Rider, RubyMine, WebStorm 请访问原文链接:JetBrains IDE 2024.1 (macOS, Linux, Windows) - 开发者工具࿰…...
C++ 构造函数中的参数顺序
描述: 未初始化的参数必须在初始化参数之前 正确 ✓ 写法: mother(const char* food, const char* lastName"无姓", const char* firstName "无名" ); 错误❌写法: mother(const char* lastName"无姓", …...
Git Flow困境逃脱指南
本来来自极狐GitLab 资源中心,原文链接:https://resources.gitlab.cn/articles/020183ba-cfc0-4917-b901-248acdcfc92f。 GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab ÿ…...
MySQL的sql_mode模式简介
前言 今天同事使用数据库时报错,排查问题时发现配置文件里的sql_mode配置被人注释了,所以通过查询资料对这个配置进行了下了解。 介绍 mysql为了支持在不同的环境下运行,允许我们给它设置不同的运行模式(sql_mode)。 不同的运行模式&#…...
性能优化-如何爽玩多线程来开发
前言 多线程大家肯定都不陌生,理论滚瓜烂熟,八股天花乱坠,但是大家有多少在代码中实践过呢?很多人在实际开发中可能就用用Async,new Thread()。线程池也很少有人会自己去建,默认的随便用用。在工作中大家对…...
非关系型数据库-----------Redis的主从复制、哨兵模式
目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…...
使用docx4j转换word为pdf处理中文乱码问题
word转pdf 实现方法 mavendocx4j版本自己酌情升级 实现方法 import org.docx4j.Docx4J; import org.docx4j.fonts.IdentityPlusMapper; import org.docx4j.fonts.Mapper; import org.docx4j.fonts.PhysicalFonts; import org.docx4j.openpackaging.packages.WordprocessingMLP…...
【引子】C++从介绍到HelloWorld
C从介绍到HelloWorld 一、C的介绍1. 简介2. 应用场景3. C的标准4. C的运行过程 二、Visual Studio的安装1. 什么是Visual Studio2. Visual Studio的安装 三、完成HelloWorld1.…...
Django检测到会话cookie中缺少HttpOnly属性手工复现
一、漏洞复现 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。 第一步:复制URL:http://192.168.43.219在浏览器打开,…...
2024数字城市建设博览会:一站式平台,满足多元需求
2024数字城市建设博览会:引领未来城市发展的风向标 2024年,一场前所未有的盛会——数字城市建设博览会暨交流大会,将在雄安这座未来之城拉开帷幕。本次大会不仅是数字经济全产业链的精英集结,更是一场汇聚了众多优质项目和丰富客…...
iOS 17.5系统或可识别并禁用未知跟踪器,苹果Find My技术应用越来越合理
苹果公司去年与谷歌合作,宣布将制定新的行业标准来解决人们日益关注的跟踪器隐私问题。苹果计划在即将发布的 iOS 17.5 系统中加入这项提升用户隐私保护的新功能。 科技网站 9to5Mac 在苹果发布的 iOS 17.5 开发者测试版内部代码中发现了这项反跟踪功能的蛛丝马迹…...
关于搭建elk日志平台
我这边是使用docker compose进行的搭建 所以在使用的时候 需要自行提前安装docker以及dockercompose环境 或者从官网下载对应安装包也可以 具体文章看下一章节:【ELK】搭建elk日志平台(使用docker-compose),并接入springboot项目...
【全套源码教程】基于SpringBoot+MyBatis+Vue的流浪动物救助网站的设计与实现
目录 前言 需求分析 可行性分析 技术实现 后端框架:Spring Boot 持久层框架:MyBatis 前端框架:Vue.js 数据库:MySQL 功能介绍 前台界面功能介绍 动物领养及捐赠 宠物论坛 公告信息 商品页面 寻宠服务 个人中心 购…...
Word wrap在计算机代表的含义(自动换行)
“Word wrap”是一个计算机术语,用于描述文本处理器在内容超过容器边界时自动将超出部分转移到下一行的功能。在多种编程语言和文本编辑工具中,都有实现这一功能的函数或选项。 在编程中,例如某些编程语言中的wordwrap函数,能够按…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
