当前位置: 首页 > news >正文

Spring-Data-Elasticsearch

简介

Spring Data for Elasticsearch 是 Spring Data 项目的一部分,该项目旨在为新数据存储提供熟悉且一致的基于 Spring 的编程模型,同时保留特定于存储的特性和功能。

Spring Data Elasticsearch 项目提供了与 Elasticsearch 搜索引擎的集成。Spring Data Elasticsearch 的关键功能领域是以 POJO 为中心的模型,用于与 Elastichsearch 文档交互并轻松编写存储库样式的数据访问层。

简单使用

1.创建SpringBoot项目,导入Spring Data Elasticsearch的起步依赖。

/*elasticsearch的起步依赖*/ 
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>/*lomobok起步依赖*/<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

2.编写配置文件,连接ElasticSearch

spring:elasticsearch:uris: https://192.168.66.101:9200username: elasticpassword: 12345678

 打印日志 

logging: pattern: console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'

ES8 开始,访问 ES 的协议从 http 变成了 https ,访问 https 请求 需要SSL 证书,在开发环境下我们不需要配置该证书,在项目中 添加一个配置类,跳过SSL 证书检查即可。

3.创建配置类跳过SSL证书检查 

@Component
public class RestClientBuilderCustomizerImpl implements RestClientBuilderCustomizer {@Overridepublic void customize(RestClientBuilder builder) {}/*** 跳过SSL的证书检查*/@Overridepublic void customize(HttpAsyncClientBuilder builder) {SSLContextBuilder sscb = SSLContexts.custom();try {sscb.loadTrustMaterial((chain, authType) -> {return true;});} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);} catch (KeyStoreException e) {throw new RuntimeException(e);}try {builder.setSSLContext(sscb.build());} catch (KeyManagementException | NoSuchAlgorithmException e) {e.printStackTrace();}}
}

 4.创建实体类

一个实体类的所有对象都会存入 ES 的一个索引中,所以我们在创建实体类时关联ES 索引
@Document(indexName = "product",createIndex = true)  //关联名为product的索引
@Data
@AllArgsConstructor
public class Product {@Id //标记在成员变量上,标记一个字段为主键,该字段的值会同步到ES该文档的id值//标记在成员变量上,标记为文档中的域,一般有如下属性->// type域的类型,index是否创建索引,store是否单独存储,analyzer分词器,searchAnalyzer搜索分词器@Field(type = FieldType.Integer,store = true,index = true)private Integer id;@Field(type = FieldType.Text,store = true,index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")private String productName;@Field(type = FieldType.Text,store = true,index = true,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")private String productDesc;
}

 5.创建Repository接口

Repository 接口继承 ElasticsearchRepository, 该接口提供了文档的增删改查方法
@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {
}

6.测试Repository接口

6.1测试保存和修改方法

@SpringBootTest
public class ProductRepositoryTest {@Autowiredprivate ProductRepository repository;//保存文档public void addProduct(){Product product = new Product(1, "今天是第一天", "第一天plus");repository.save(product);}//修改方法(当该文档已经存在,即对其进行修改)public void addProduct(){Product product = new Product(1, "今天是第first天", "第first天plus");repository.save(product);}
}

6.2查找文档方法

6.2.1根据id进行查询
@Testpublic void findById(){Optional<Product> byId = repository.findById(1);System.out.println(byId.get());}
6.2.2查询所有文档
@Testpublic void findAll(){repository.findAll().forEach(System.out::println);}

6.3测试删除方法

//根据其主键id进行删除
@Testpublic void deleteById(){repository.deleteById(1);}

7.使用DSL语句查询文档

query 后的 json 对象称为 DSL语句 ,我们可以在接口方法上使用 @Query注解自定义 DSL 语句查询。

 在Repository接口层编写方法

7.1 匹配查询

@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {//匹配查询@Query("{\n" +"    \"match\": {\n" +"      \"productDesc\": \"?0\"\n" +"    }\n" +"  }")List<Product> findByProductDescMatch(String keyword);
}

7.2模糊查询

@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {@Query(" {\n" +"    \"match\": {\n" +"      \"productDesc\":{\n" +"        \"query\": \"\\?0\",\n" +"        \"fuzziness\": 1\n" +"      }\n" +"    }\n" +"  }")List<Product> findByProductDescFuzzy(String keyword);
}

8.按照规则命名方法查询文档

 1.只需在 Repository 接口中按照一定的规则命名方法,该方法就能完成相应的查询
2. 规则:查询方法以 findBy 开头,涉及查询条件时,条件的属性用条件关键字连接。

8.1单条件查询

@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {//根据规则进行查询-通过productNameList<Product> findByProductName(String productName);
}

测试:

@Testpublic void testFindByProductName(){List<Product> byProductName = repository.findByProductName("iphone");byProductName.forEach(System.out::println);}

8.2 多条件选择查询

@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {
//测试按照规则命名使用    Or 查询
List<Product> findByProductNameOrProductDesc(String productName,String productDesc);
}

测试:

@Testpublic void testFindByProductNameOrProductDesc(){repository.findByProductNameOrProductDesc("iphone","三体").forEach(System.out::println);}

8.3范围查询

@Repository
public interface ProductRepository extends ElasticsearchRepository<Product,Integer> {//测试使用命名规则进行  范围查询
List<Product> findByIdBetween(Integer start,Integer end);
}

测试:

@Testpublic void testFindByProductIdBetween(){repository.findByIdBetween(1,3).forEach(System.out::println);}

9.分页查询

在使用继承或自定义的方法时,在方法中添加 Pageable 类型的参 数,返回值为Page 类型即可进行分页查询。

9.1继承方法

@Testpublic void testFindPage(){//参数1:当前页,从0开始,参数2:每页显示多少条Pageable pageable = PageRequest.of(0,3);Page<Product> all = repository.findAll(pageable);System.out.println("总条数:"+all.getTotalElements());System.out.println("总页数:"+all.getTotalPages());System.out.println("数据:"+all.getContent());}

10.分页查询并排序

10.1继承方法

使用继承或自定义的方法时,在方法中添加 Sort 类型的参数即可进行结果排序。
 @Testpublic void testFindPage2(){//既分页,又排序Sort sort = Sort.by(Sort.Direction.DESC, "id");Pageable pageable = PageRequest.of(0,3,sort);Page<Product> all = repository.findByProductDescMatch("体",pageable);System.out.println("总条数:"+all.getTotalElements());System.out.println("总页数:"+all.getTotalPages());System.out.println("数据:"+all.getContent());}

相关文章:

Spring-Data-Elasticsearch

简介 Spring Data for Elasticsearch 是 Spring Data 项目的一部分&#xff0c;该项目旨在为新数据存储提供熟悉且一致的基于 Spring 的编程模型&#xff0c;同时保留特定于存储的特性和功能。 Spring Data Elasticsearch 项目提供了与 Elasticsearch 搜索引擎的集成。Spring…...

代码随想录二刷7.22|977.有序数组的平方

暴力解法&#xff1a; ——如果想暴力解决这个问题的话&#xff0c;可以像题目那样&#xff0c;先将每一个元素平方&#xff0c;然后再排序 双指针&#xff1a; ——从题目中找到的信息&#xff1a;这是一个非递减顺序的整数数组&#xff0c;从例子中&#xff0c;可以容易看…...

redis介绍与布署

redis remote dictionary server&#xff08;远程字典服务器&#xff09; 是一个开源的&#xff0c;使用c语言编写的非关系型数据库&#xff0c;支持内存运行并持久化&#xff0c;采用key-value的存储形式。 单进程模型意味着可以在一台服务器上启动多个redis进程&#xff0c;…...

PMON的解读和开发

提示&#xff1a;龙芯2K1000PMON相关记录 文章目录 1 PMON的发展和编译环境PMONPMON2000 2 PMON2000的目录结构3 Targets目录的组成4 PMON编译环境的建立5 PMON2000的框架6 异常向量表7 Pmon的空间分配8 PMON的汇编部分(starto.S或sbdreset.S)的解读Start.SC代码部分dbginit 9 …...

初识c++(构造函数,析构函数,拷贝构造函数,赋值运算符重载)

一、类的默认函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。 #include<iostream> using namespace std; class Date { public:Date(){_year 1;_month 1;_day 1;cout << _year << "/" <&…...

CANoe:为什么两个VLAN接口不能设置同一个网络的IP地址呢?

经常玩CANoe的人应该配置过TCP/IP Stack中网络节点的网卡信息&#xff0c;基本的信息包含&#xff1a;MAC地址、IP地址、子网掩码、默认网关、MTU值、IPv6地址。 如果你想让发送出去的报文携带VLAN tag&#xff0c;可以在网卡上添加VLAN tag信息。 此时你就能得到两个新的网卡V…...

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以在…...

性能测试的流程(企业真实流程详解)(二)

性能测试的流程 1.需求分析以及需求确定(指标值&#xff0c;场景&#xff0c;环境&#xff0c;人员) 一般提出需求的人员有&#xff1a;客户&#xff0c;产品经理&#xff0c;项目组领导等 2.性能测试计划和方案制定 基准测试: 负觋测试: 压力测试: 稳定性测试: 其他:配置测试…...

使用sklearn的基本流程

scikit-learn&#xff0c;通常简称为 sklearn&#xff0c;是一个开源的Python库&#xff0c;是基于 Python 编程语言的一个非常流行的机器学习库。它建立在 NumPy 和 SciPy 这两个科学计算库之上&#xff0c;并与 Matplotlib 配合使用&#xff0c;为数据预处理、模型训练、评估…...

力扣题解(乘积为正数的最长子数组长度)

1567. 乘积为正数的最长子数组长度 已解答 中等 给你一个整数数组 nums &#xff0c;请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 本题要求乘积为正数&#xff0c;而整…...

PPTP、L2TP、IPSec、IPS 有什么区别?

随着互联网的发展&#xff0c;保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术&#xff0c;在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议&#xff08;PPTP&#xff09;是一种用…...

SpringBoot注解--11--@JSONField @JsonProperty

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一个问题&#xff1a;后端实体类isXXX开头的属性&#xff0c;传到前端后自动去掉is解决方法&#xff1a; JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不…...

C语言 | Leetcode C语言题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int dp[301][301]{0};int wid0;if(matrixSize0&&matrixColSize[0]0){return 0;}for(int i0;i<matrixSize;i){for(int j0;j<matrixColSize[0];j){if(m…...

AI数据服务如何驱使AI商业化,实现在各行业落地融合

AI技术经历数十载的发展&#xff0c;正在加速向各行各业渗透。近年来深度学习加速了人工智能技术的商业化落地的同时&#xff0c;也带来了大量AI算法训练需求&#xff0c;推动AI数据服务市场的快速增长。作为AI快速发展的“基石”&#xff0c;AI数据服务AI数据服务如何驱使AI在…...

户用光伏项目开发流程

1、收集业主信息 管理业主基本信息&#xff0c;包括但不限于联系方式、地址、房屋信息等。 2、业主开卡 每户都需要办理银行卡&#xff0c;用于电费结算和划转。 3、合同签约 业主开卡完成之后&#xff0c;平台方发起签约&#xff08;支持线上签约&#xff09;&#xff0c…...

C++ 函数返回值是引用类型使用场景

目录 1、希望返回函数内部的局部静态变量或全局变量 2、希望通过函数返回一个对象的成员变量 3、希望实现链式操作 4、避免对象的拷贝 5、需要注意的事项 在C中&#xff0c;函数的返回值可以是引用类型的情况主要有以下几种&#xff1a; 1、希望返回函数内部的局部静态变…...

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…...

08.C2W3.Auto-complete and Language Models

往期文章请点这里 目录 N-Grams: OverviewN-grams and ProbabilitiesN-gramsSequence notationUnigram probabilityBigram probabilityTrigram ProbabilityN -gram probabilityQuiz Sequence ProbabilitiesProbability of a sequenceSequence probability shortcomingsApproxi…...

【linux】log 保存和过滤

log 保存 ./run.sh 2>&1 | tee -a /home/name/log.txt log 过滤 import os import re# Expanded regular expression to match a wider range of error patterns error_patterns re.compile(# r(error|exception|traceback|fail|failed|fatal|critical|warn|warning…...

GeoTrust ——适合企业使用的SSL证书!

GeoTrust是一家全球知名的数字证书颁发机构&#xff08;CA&#xff09;&#xff0c;其提供的SSL证书非常适合企业使用。GeoTrust的SSL证书为企业带来了多重优势&#xff0c;不仅在验证级别、加密强度、兼容性、客户服务等方面表现出色&#xff0c;而且其高性价比和灵活的证书选…...

Kubelet 认证

当我们执行kubectl exec -it pod [podName] sh命令时&#xff0c;apiserver会向kubelet发起API请求。也就是说&#xff0c;kubelet会提供HTTP服务&#xff0c;而为了安全&#xff0c;kubelet必须提供HTTPS服务&#xff0c;且还要提供一定的认证与授权机制&#xff0c;防止任何知…...

aws slb

NLB 目标组 Target is in an Availability Zone that is not enabled for the load balancer 解决&#xff1a; https://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html 负载均衡器添加 后端EC2 所在的vpc网段即可。…...

【AI大模型】ChatGPT-4 对比 ChatGPT-3.5:有哪些优势

引言 ChatGPT4相比于ChatGPT3.5,有着诸多不可比拟的优势&#xff0c;比如图片生成、图片内容解析、GPTS开发、更智能的语言理解能力等&#xff0c;但是在国内使用GPT4存在网络及充值障碍等问题&#xff0c;如果您对ChatGPT4.0感兴趣&#xff0c;可以私信博主为您解决账号和环境…...

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…...

汽车零配件行业看板管理系统应用

生产制造已经走向了精益生产&#xff0c;计算时效产出、物料周转时间等问题&#xff0c;成为每一个制造企业要面临的问题&#xff0c;工厂更需要加快自动化&#xff0c;信息化&#xff0c;数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统&#xff0c;本篇文章就为大…...

【Go】函数的使用

目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递&#xff08;指针&#xff09; 函数返回多个值 用法如下&#xff1a; package mainimport ("fmt""strconv" )// 返回多个返回值&#xff0c;无参数名 func Mu…...

宝塔面板运行Admin.net框架

准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04&#xff08;本贴使用的是Ubuntu20.04版本系统&#xff09; Admin.net开发框架 先安装好服务器系统&#xff0c;这里就不做安装过程描述了&…...

Javaweb11-Filter过滤器

Filter过滤器 1.Filter的基本概念&#xff1a; 在Java Servlet中&#xff0c;Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...

【AI-7】CUDA

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA公司开发的一种并行计算平台和编程模型&#xff0c;使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍&#xff1a; CUDA的特点 并行计算&#xff1a;CUDA允许开发…...

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染&#xff0c;一个是 png&#xff0c;一个是 jpg 目录 1、web164 2、web165 二次渲染&#xff1a; 网站服务器会对上传的图片进行二次处理&#xff0c;对文件内容进行替换更新&#xff0c;根据原有图片生成一个新的图片&#xff0c;这样…...

河北网站开发多少钱/如何免费推广一个网站

文章目录流程循环数组简单案例先看看效果图 流程 使用数组的slice() 方法通过条件判断截取原数组相应内容组成新数组 循环数组 let currentPage 0 // arr:原数组 newLen:新数组需要的长度 currentPage:现在的页码// 方法一&#xff1a; function loopData(arr, newLen) {…...

辽宁世纪兴电子商务服务中心/seo门户网站建设方案

在实现页面五花八门的有特色的ui时&#xff0c;我们有时会遇到要用实现一个弧形&#xff0c;而这样的弧形要怎么实现呢&#xff1f;用图片&#xff1f;好像不大现实&#xff0c;因为这样就要无故多加载一张图片了&#xff0c;这里我们来说说怎么用css的after伪类来实现弧形。先…...

济南seo网站优化/百度网盘下载慢

密码一会被盗 一会404 密码cookie也记不住 擦 还技术网站 完全没落了&#xff01;&#xff01;&#xff01;...

互联网平面设计/网络优化工资一般多少

本来以为iPad已经把平板的大概趋势勾勒出来了&#xff0c;结果微软Surface又把平板和台式机进行了折中&#xff0c;而Nexus 7平板在走它的小资不创新道路&#xff0c;平板电脑的方向在哪里、如何杀出平板红海&#xff1f; 通过咨询13个科技领袖对平板趋势的意见&#xff0c;他们…...

c 可以做网站嘛/链接搜索

我们为什么要学习Python编程语言&#xff1f;原因很简单&#xff0c;Python有很多吸引程序员的功能&#xff0c;它易学&#xff0c;面向对象&#xff0c;字节码编译&#xff0c;免费且开源。现在信息更新的非常快速&#xff0c;又迎来了大数据的时代&#xff0c;各行各业如果不…...

域名网站如何做市场推广/营销策划案例

rtl8192cuI find the rtl8192cu wireless adapter driver on CentOS 7 is quite unstable. After running a while, the connection will disappear.我发现CentOS 7上的rtl8192cu无线适配器驱动程序非常不稳定。 运行一段时间后&#xff0c;连接将消失。 How to make it stabl…...