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函数,能够按…...

室友打团太吵?一条命令让它卡死
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:更多干货,请关注专栏《网络安全自学教程》 SYN Flood 1、hping3实现SYN Flood1.1、主机探测1.2、扫描端…...

RabbitMQ3.13.x之八_RabbitMQ中数据文件和目录位置
RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置 文章目录 RabbitMQ3.13.x之_RabbitMQ中数据文件和目录位置1. 概述2. 覆盖位置1. 路径和目录名称限制2.所需的文件和目录权限 3. 环境变量4. Linux、macOS、BSD上的默认位置5. Windows上的默认位置6. 通用二进制构建默认值 1. 概…...

仿抖音短视频直播带货刷一刷商城社交电商源码系统小程序APP开发
系统功能介绍 一、短视频与社交功能 短视频浏览与互动 用户可以浏览仿抖音风格的短视频,包括评论、点赞、进入视频发布者的主页,以及加关注等功能。系统会显示用户关注的好友列表,方便用户快速查看好友发布的视频。用户还可以浏览同城视频&…...

Vue - 你知道Vue组件中的data为什么是一个函数吗
难度级别:中高级及以上 提问概率:80% 在Vue项目中,App.vue下的每个子组件都会生成一个单独的Vue实例对象,但这些子对象都是通过通过vue.extend方法创建而来的,也就是说我们平时在项目中所定义的Vue组件,都有一个相同的父类对象。这样也就…...

MUX VLAN
目录 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.使用Hybrid端口实现网络需求 3.使用Mux VLAN实现网络需求 原理概述 在实际的企业网络环境中,往往需要所有的终端用户都能够访问某些特定的服务器,而用户之间的访问控制规则则比较复杂。在…...

漫谈:“标准”是一种幻觉 C++语言标准的意义
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 “标准”这个词很迷惑…...

【Wbpack原理】基础流程解析,实现 mini-webpack
【Wbpack原理】基础流程解析,实现 mini-webpack ⛄:webpack 对前端同学来说并不陌生,它是我们学习前端工程化的第一站,在最开始的 vue-cli 中我们就可以发现它的身影。我们的 vue/react 项目是如何打包成 js 文件并在浏览器中运行…...

Debian 安装 python 3.9.6
安装相关依赖 sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev 下载Python 源码 wget https://mirrors.aliyun.com/python-release/source/Py…...

搜索二维矩阵2 合并两个有序链表
240. 搜索二维矩阵 II - 力扣(LeetCode) class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int i matrix.size() - 1, j 0;while(i > 0 && j < matrix[0].size()){if(matrix[i][j…...

深入Tauri开发——从环境搭建到项目构建
深入Tauri开发——从环境搭建到项目构建 开启你的Tauri桌面应用开发之旅(续) 经过上一篇文章的基础介绍,现在让我们更进一步,详细阐述如何在Windows和macOS平台上顺利搭建Tauri应用所需的开发环境,并指导您从创建项目…...