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

springdata框架对es集成

什么是spring data框架

Spring Data是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD 外,还包括如分页、排序等一些常用的功能。

Spring Data Elasticsearch 介绍


Spring Data Elasticsearch基于Spring Data API简化 Elasticsearch 操作,将原始操作Elasticsearch 的客户端API进行封装。Spring Data为Elasticsearch 项目提供集成搜索引擎。Spring Data Elasticsearch POJO的关键功能区域为中心的模型与Elastichsearch交互文档和轻松地编写一个存储索引库数据访问层

java如何使用呢

第一步加pom依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

第二步在配置文件中application.properties

第三步创建es配置类

需要继承一个AbstractElasticsearchConfiguration他是一个抽象类,并重写里面的elasticsearchClient方法,这个是方法是用来连接es的客户端的

其中

@Configuration 声明是一个配置类
@ConfigurationProperties(prefix = "elasticsearch") 在配置文件中找到以elasticsearch开头的
@Data 提供get set 方法

第四步 创建一个实体

@Document(indexName = "product",shards = 3,replicas = 1) 

@Document是Spring Data Elasticsearch提供的一个注解,用于指定Java对象与Elasticsearch索引的映射关系。

indexName:索引名

shards:主分片 默认是1

replicas: 副分片 默认是1

@ID  必须全局唯一,在es中位置表示

@Field 属性(type:字段类型  analyzer:分词器  index:索引(默认true)  keyword:是否分词)

第五部 创建Dao

是一个接口和service相似 继承ElasticsearchRepository指定类型<实体类型,主键类型>

ElasticsearchRepository是Spring Data Elasticsearch提供的一个接口,它为我们提供了一组用于操作Elasticsearch的常见CRUD(创建、读取、更新、删除)方法。

接下来java调用ES的Api

ElasticsearchRestTemplate是Spring Data Elasticsearch提供的一个类,它是基于Elasticsearch的REST API构建的一个高级模板类。它提供了一系列方法来操作Elasticsearch索引,比如索引的创建、文档的索引、更新和删除等。

java如何创建索引

kibanba查看

可以看到索引创建成功了,但是为什么会自动创建了

因为我们在实体上面加了

@Document(indexName = "product",shards = 3,replicas = 1) 所以他会自动创建并分片

并且字段也进行类型也进行匹配 

java如何删除索引

kibanba

java如何判定索引是否存在

java如何往es中添加数据

kibanba查询数据

java如果修改es的数据

kibanba

java如何根据id查询数据

kibanba

java如何查询这个索引下的全部数据

kibanba

java如何删除索引数据

kibanba

java如何批量新增数据

kibanba

java如何进行分页并进行排序

java如何进行复杂的查询

一些简单的查询可以直接用ElasticsearchRepository中提供的方法

如果想要实现分页、排序、多条件查询就需要使用ElasticsearchOperations

二者区别

ElasticsearchOperationsElasticsearchRepository是Spring Data Elasticsearch提供的两个不同的接口,它们之间有一些区别。

  1. ElasticsearchOperationsElasticsearchOperations是Spring Data Elasticsearch提供的核心接口之一,它定义了一组用于与Elasticsearch进行交互的方法。通过ElasticsearchOperations,您可以执行各种操作,如索引文档、更新文档、删除文档、执行查询等。这个接口提供了更灵活和底层的操作方式,适用于需要更精细控制的场景。

  2. ElasticsearchRepositoryElasticsearchRepository是Spring Data Elasticsearch提供的另一个接口,它是基于CrudRepository的子接口。ElasticsearchRepository为您提供了一组CRUD操作的方法,包括保存文档、更新文档、删除文档和查询文档等。您可以使用这些方法来操作Elasticsearch中的数据,而无需编写太多的自定义代码。这个接口提供了更高级和简化的操作方式,适用于常见的CRUD场景。

结果为什么会把小米1 小米2 小米3都查询出来呢

  1. matchQuerymatchQuery是一种全文搜索查询,它将查询字符串分词并匹配文档中包含任何一个词项的文档。它会将查询字符串进行分析,生成词项,并在查询过程中考虑词项的权重和相似度。matchQuery可以模糊匹配,对于不完全匹配的情况,它会根据相关性进行评分排序。如果查询字段中存在多个词项,它会尝试匹配其中的任意一个。
  2. termQuerytermQuery是一种精确匹配查询,它会将查询字符串作为一个整体进行匹配,不会对查询字符串进行分词。只有当查询字段中的内容和查询字符串完全匹配时,才会返回匹配的文档。termQuery不考虑相关性和评分,只会精确匹配。
  3. 我改成termQuey查询,还是查询不来呢

  4. 问题可能是由于您的字段类型造成的。在Elasticsearch中,termQuery是用于精确匹配的查询,而matchQuery则是用于全文搜索的查询。对于文本类型的字段,Elasticsearch会对其进行分词处理,以便能够进行更灵活的匹配。

    如果您的"title"字段在映射时被定义为文本类型(例如"type": "text"),那么使用termQuery可能无法精确匹配到结果,因为termQuery会将查询的关键词视为一个完整的词汇进行匹配。而matchQuery会对查询的关键词进行分词处理,并匹配包含任意分词的文档。

  5. 如果我进行字段类型,还是无法匹配

  6. 因为字段类型一旦定义了是无法通过重启程序进行变更  要不删除索引,重新加载
    结果出来了,但是一般不建议是删除索引,因为一旦删除索引,数据也会不存在的

  7. ElasticsearchOperations和ElasticsearchRestTemplate和ElasticsearchRepository
    三者区别

  8. ElasticsearchOperations: ElasticsearchOperations是一个通用的接口,提供了与Elasticsearch进行交互的基本操作,例如索引、更新、删除和搜索文档等。它是Spring Data Elasticsearch提供的最底层的接口,提供了直接与Elasticsearch进行交互的能力。

  9. ElasticsearchRestTemplate: ElasticsearchRestTemplate是ElasticsearchOperations接口的一个实现,它使用Elasticsearch的REST API来与Elasticsearch进行交互。它提供了一组方法,用于执行索引、更新、删除、搜索等操作,并支持更高级的功能,如聚合、高亮等。它是基于Spring的RestTemplate构建的,可以通过注入的方式在应用程序中使用。

  10. 总结来说,ElasticsearchOperations是最底层的操作接口,提供了与Elasticsearch进行交互的基本能力;ElasticsearchRestTemplate是ElasticsearchOperations的一个实现,使用Elasticsearch的REST API进行交互;ElasticsearchRepository是一个高级接口,用于进行常见的CRUD操作,并提供了默认的实现,使得与Elasticsearch的集成更加便捷。您可以根据具体的需求选择使用哪个接口。

  11. ElasticsearchRepository: ElasticsearchRepository是一个高级接口,它扩展了Spring Data提供的CrudRepository接口,用于对Elasticsearch进行常见的CRUD操作。它提供了一组默认的方法,例如保存、删除、搜索等,可以通过继承该接口来自定义和扩展特定实体类的操作。Spring Data Elasticsearch会自动为实现了ElasticsearchRepository接口的类生成相应的实现,简化了与Elasticsearch的集成。

相关文章:

springdata框架对es集成

什么是spring data框架 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的…...

jvm(虚拟机)运行时数据区域介绍

Java虚拟机&#xff08;JVM&#xff09;运行时数据区域是Java程序在运行过程中使用的内存区域&#xff0c;它主要包括以下几个部分&#xff1a; 程序计数器&#xff08;Program Counter Register&#xff09;&#xff1a; 程序计数器是一块较小的内存区域&#xff0c;是线程私有…...

C++ MFC 只启动一个程序实例 唤醒之前的实例(完整源码)

初级代码游戏的专栏介绍与文章目录-CSDN博客 很多时候我们希望只允许启动一个程序实例&#xff0c;如果再次运行&#xff0c;就唤醒之前的实例。 目录 1 概述 2 相关技术介绍 2.1 互斥对象 2.2 查找窗口 2.3 唤醒窗口 1 概述 技术上并不难&#xff0c;涉及到以下几个技术…...

2024多云管理平台CMP排名看这里!

随着云计算技术的迅猛发展&#xff0c;多云管理平台CMP应运而生。多云管理平台CMP仅能够简化对多个云环境的统一管理&#xff0c;还能提高资源利用效率和降低成本。因此了解多云管理平台CMP品牌是必要的。2024多云管理平台CMP排名看这里&#xff01;仅供参考哈&#xff01; 20…...

MySQL 数据库的日志管理、备份与恢复

一. 数据库备份 1.数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为,操作错误,运算错误,磁盘故障灾难&#xff08;如火灾、地震&#xff0…...

一、Go开发环境搭建

文章目录 1、开发工具2、开发环境配置3、Hello World4、语法 1、开发工具 https://code.visualstudio.com/download 2、开发环境配置 类比Java的JDK&#xff0c;go的SDK下载&#xff1a;https://studygolang.com/dl 解压&#xff1a; 配置环境变量path&#xff0c;将命令&quo…...

包子凑数(蓝桥杯,闫氏DP分析法)

题目描述&#xff1a; 小明几乎每天早晨都会在一家包子铺吃早餐。 他发现这家包子铺有 N 种蒸笼&#xff0c;其中第 i 种蒸笼恰好能放 Ai 个包子。 每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买 X 个包子&#xff0c;卖包子的大叔就会迅速选出若干笼…...

Java八股文(JVM)

Java八股文のJVM JVM JVM 什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f; Java虚拟机是一个运行Java字节码的虚拟机。 它负责将Java程序翻译成机器代码并执行。 JVM的主要组成部分是什么&#xff1f; JVM包括以下组件&#xff1a; ● 类加载器&#xff08;ClassLoa…...

云硬盘扩容后将空间增加到原有分区的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Tensorflow2.0笔记 - metrics做损失和准确度信息度量

本笔记主要记录metrics相关的内容&#xff0c;详细内容请参考代码注释&#xff0c;代码本身只使用了Accuracy和Mean。本节的代码基于上篇笔记FashionMnist的代码经过简单修改而来&#xff0c;上篇笔记链接如下&#xff1a; Tensorflow2.0笔记 - FashionMnist数据集训练-CSDN博…...

LeetCode 面试经典150题 290.单词规律

题目&#xff1a; 给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 思路&#xff1a;一一映射需要用到…...

【CASS精品教程】CASS中计算四参数和七参数(以RTK数据为例)

文章目录 一、四参数介绍二、四参数计算三、七参数介绍四、四参数、七参数的区别一、四参数介绍 两个不同的二维平面直角坐标系之间转换通常使用四参数模型,四参数适合小范围测区的空间坐标转换,相对于七参数转换的优势在于只需要2个公共已知点就能进行转换,操作简单。 在…...

什么是RISC-V?开源 ISA 如何重塑未来的处理器设计

RISC-V代表了处理器架构的范式转变&#xff0c;特点是其开源模型简化了设计理念并促进了全球community-driven的开发。RISC-V导致了处理器技术发展前进方式的重大转变&#xff0c;提供了一个不受传统复杂性阻碍的全新视角。 RISC-V起源于加州大学伯克利分校的学术起点&#xff…...

展馆设计中展示有哪些要求

1、展示产品特点和功能 产品展示应突出产品的特点、功能和优势。通过使用适当的展示方式和展示环境&#xff0c;使观众能够直观地了解产品的外观、结构、性能等方面。可以使用实物展示、模型、原型、图表、动画等方式&#xff0c;以多种角度和视角展示产品的特点和功能。 2、提…...

python实战之PyQt5桌面软件

一. 演示效果 二. 准备工作 1. 使用pip 下载所需包 pyqt5 2. 下载可视化UI工具 QT Designer 链接&#xff1a;https://pan.baidu.com/s/1ic4S3ocEF90Y4L1GqYHPPA?pwdywct 提取码&#xff1a;ywct 3. 可视化UI工具汉化 把上面的链接打开, 里面有安装和汉化包, 前面的路径还要看…...

Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174

Ryujinx/Ryujinx Stars: 26.1k License: MIT Ryujinx 是用 C# 编写的实验性任天堂 Switch 模拟器。 该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约 4050 个测试&#xff0c;其中超过 4000 个可以启动并进入游戏&#xff0c;其中大约 340…...

免费翻译pdf格式论文

进入谷歌翻译网址https://translate.google.com/?slauto&tlzh-CN&opdocs 将需要全文翻译的pdf放进去 选择英文到中文&#xff0c;然后点击翻译 可以选择打开译文或者下载译文&#xff0c;下载译文会下载到电脑上&#xff0c;打开译文会在浏览器打开。...

3D产品可视化SaaS

“我们正在走向衰退吗&#xff1f;” “我们已经陷入衰退了吗&#xff1f;” “我们正在步入衰退。” 过去几个月占据头条的问题和陈述引发了关于市场对每个行业影响的讨论和激烈辩论。 特别是对于科技行业来说&#xff0c;过去几周一直很动荡&#xff0c;围绕费用、增长和裁…...

浙大版《C语言程序设计(第4版)》题目集-习题3-5 三角形判断

给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3)&#xff0c;检验它们能否构成三角形。 输入格式: 输入在一行中顺序给出六个[−100,100]范围内的数字&#xff0c;即三个点的坐标x1、y1、x2、y2、x3、y3。 输出格式: 若这3个点不能构成三角形&#xff0c;则在一行中输…...

Java封装、继承、多态和抽象深度解析

在软件工程的世界里&#xff0c;面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它使用“对象”来设计软件。对象可以封装数据和方法&#xff0c;以提高代码的复用性、可维护性和可扩展性。Java作为一门面向对象的编程语言&#xff0c;提供了四个基本的面向…...

深度学习每周学习总结P3(天气识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 数据链接 提取码&#xff1a;o3ix 目录 0. 总结1. 数据导入部分数据导入部分代码详解&#xff1a;a. 数据读取部分a.1 提问&#xff1a;关…...

通过iOS网络抓包工具实现移动应用数据安全监控

摘要 本文将深入探讨iOS平台上常用的网络抓包工具&#xff0c;包括Charles、克魔助手、Thor和Http Catcher&#xff0c;以及通过SSH连接进行抓包的方法。此外&#xff0c;还介绍了克魔开发助手作为iOS应用开发的辅助工具&#xff0c;提供的全方面性能监控和调试功能。 在iOS应…...

Stable Diffusion WebUI 生成参数:脚本(Script)——提示词矩阵、从文本框或文件载入提示词、X/Y/Z图表

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 在本篇文章中,我们将深入探讨 Stable Diffusion WebUI 的另一个引人注目的生成参数——脚本(Script)。我们将逐一细说提示词矩阵、从文本框或文件导入提示词,…...

synchronized和volatile的原理及应用

文章目录 synchronized的实现原理及应用升级锁代码示例volatile原理及应用代码示例线程不安全类 synchronized的实现原理及应用 synchronized 是Java中用于实现线程同步的关键字&#xff0c;可以应用于方法或代码块&#xff0c;确保在多线程环境下对共享资源的安全访问。下面是…...

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之九 简单闪烁效果 一、简单介绍 二、简单闪烁效果实现原理 三、简单闪烁效果案例实现简单步骤 四、注意事项 一、简单…...

11 开源鸿蒙OpenHarmony轻量系统源码分析

开源鸿蒙轻量系统源码分析 作者将狼才鲸日期2024-03-28 一、前言 之前单独的LiteOS是通过Makefile编译的&#xff0c;当前的开源鸿蒙LiteOS-M和LiteOS-A是通过gn和ninja编译的。 Gitee官方只介绍了LiteOS-M的gn ninja编译的流程&#xff0c;针对M3使用Keil编译的流程可能要参…...

专题:一个自制代码生成器(嵌入式脚本语言)之应用实例

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;一个自制代码…...

Appium设备交互API

设备交互API指的是操作设备系统中的一些固有功能&#xff0c;而非被测程序的功能&#xff0c;例如模拟来电&#xff0c;模拟发送短信&#xff0c;设置网络&#xff0c;切换横竖屏&#xff0c;APP操作&#xff0c;打开通知栏&#xff0c;录屏等。 模拟来电 make_gsm_call(phon…...

Qlib-Server部署

Qlib-Server部署 介绍 构建Qlib服务器,用户可以选择: 一键部署Qlib服务器逐步部署Qlib服务器一键部署 Qlib服务器支持一键部署,用户可以选择以下两种方法之一进行一键部署: 使用docker-compose部署在Azure中部署使用docker-compose进行一键部署 按照以下步骤使用docker…...

CMC学习系列 (4):β段CMC可以作为一种中风治疗的生物标志物和治疗靶点

CMC学习系列:β段CMC可以作为一种中风治疗的生物标志物和治疗靶点 0. 引言1. 主要贡献2. 方法2.1 相干源动态成像2.2 源统计分析 3. 结果3.1 训练前后比较3.2 源代码分析3.3 皮质重叠的分组分析 4. 讨论5. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/sci…...