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函数,能够按…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...
