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的集成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssh 公私钥(github)

一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对&#xff0c;需要使用ssh-keygen命令&#xff0c;这是大多数Linux和Unix系统自带的标准工具。下面&#xff0c;简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先&#xff0c;打开我…

对话 Mines of Dalarnia: Web3 游戏创新,社区驱动与公链共建

作者&#xff1a;stellafootprint.network 嘉宾&#xff1a;Manfred Pack&#xff0c;Mines of Dalarnia 游戏开发总监 采访者&#xff1a;Alex Cooper&#xff0c;Footprint Analytics 北美社区与 BD 负责人 在区块链游戏领域&#xff0c;去中心化和玩家经济正在颠覆传统游戏…

泛型,数据结构,集合

文章目录 泛型介绍解决问题好处使用通配符泛型的下限泛型的上限 数据结构定义常见的数据结构栈(先进后出)队列(先进先出)数组结构链表结构哈希表结构 集合List集合特点特有方法子类及其底层数据结构LinkedList集合 Set集合特点没有特有方法子类及其底层数据结构LinkedHashSet集…

vscode使用sftp上传

1.用vscode打开项目 2.安装一下这个sftp 3.使用快捷键 ctrlshiftP 打开指令窗口&#xff0c;输入 sftp:config&#xff0c;选中回车&#xff0c;在当前目录中会自动生成 .vscode 文件夹及 sftp.json 4.修改sftp.json文件配置&#xff0c;改成以下&#xff08;默认的参数可能上传…

AJAX-项目优化(目录、基地址、token、请求拦截器)

目录管理 基地址存储 在utils/request.js配置axios请求基地址 作用&#xff1a;提取公共前缀地址&#xff0c;配置后axios请求时都会baseURLurl 填写API的公共前缀后&#xff0c;将js文件导入到html文件中 <script src"../../utils/request.js"></script&…

AI新工具 又一个开源大模型DBRX击败GPT3.5;根据音频和图像输入生成会说话、唱歌的动态视频

✨ 1: AniPortrait 腾讯开源&#xff1a;根据音频和图像输入生成会说话、唱歌的动态视频 AniPortrait 是个先进的框架&#xff0c;专门用来生成高质量的、由音频和参考肖像图片驱动的动画。如果你有视频&#xff0c;也可以用来实现面部的再现&#xff08;Face reenactment&am…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写&#xff0c;发表于2002年。研究团队通过第一性原理计算&#xff0c;探讨了位错对氮化镓&#xff08;GaN&#xff09;电子能量损失谱&#xff08;EEL&#xff09;…

内网穿透_ICMP_icmpsh

目录 一、ICMP协议详解 二、ICMP隧道 (一) 为什么会使用ICMP (二) 实验环境 (三) 操作流程 1. 下载icmpsh 2. 下载并安装依赖 3. 关闭本地icmp响应 4. 攻击机启动服务端开始监听 5. 靶机启动工具客户端 6. 攻击机接受到靶机传来的数据 三、郑重声明 一、ICMP协议详…

C# 反射的使用及场景

1&#xff0c;使用反映将一个对象的同名属性赋值给另一个对象 2, DataTable 转换成一个实体 3&#xff0c;使用反射动态执行方法 4,根据属性信息来执行对应的方法 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using…

Spring用到了哪些设计模式?

目录 Spring 框架中⽤到了哪些设计模式&#xff1f;工厂模式单例模式1.饿汉式&#xff0c;线程安全2.懒汉式&#xff0c;线程不安全3.懒汉式&#xff0c;线程安全4.双重检查锁&#xff08;DCL&#xff0c; 即 double-checked locking&#xff09;5.静态内部类6.枚举单例 代理模…

【论文阅读】UniLog: Automatic Logging via LLM and In-Context Learning

注 由于其公司的保密政策&#xff0c;本文没有公开源代码&#xff0c;数据是公开的。 文章目录 摘要一、介绍二、背景和动机2.1、日志语句生成2.2、大语言模型2.3、上下文学习&#xff08;In-Context Learning&#xff0c;ICL) 三、UNILOG3.1、模型骨干3.2、提示策略3.2.1、提…

3d金属模型灯怎么安装---模大狮模型网

在3D场景中&#xff0c;添加灯光是非常重要的步骤&#xff0c;可以提升场景的氛围和逼真度。特别是对于金属材质的模型&#xff0c;合适的灯光设置能够突出其质感和反射效果。下面将介绍如何在3D软件中安装金属模型灯&#xff0c;并分为以下四个分类进行详细说明。 一、选择合适…

竞赛 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

【InternLM 实战营第二期笔记】书生·浦语大模型全链路开源体系及InternLM2技术报告笔记

大模型 大模型成为发展通用人工智能的重要途径 专用模型&#xff1a;针对特定任务&#xff0c;一个模型解决一个问题 通用大模型&#xff1a;一个模型应对多种任务、多种模态 书生浦语大模型开源历程 2023.6.7&#xff1a;InternLM千亿参数语言大模型发布 2023.7.6&#…

视觉信息处理与FPGA实现第八次作业——verilog实现对比度调节

一、查看灰度图的数据格式 2.1 安装HxD HxD下载链接&#xff1a;https://download.csdn.net/download/weixin_44357071/89045331 解压直接打开exe就能使用。 将需要查看二进制数据的图片拖到软件框里就能读取 2.2 找到bmp图像的图片点阵数据起始地址&#xff0c;原理和例子…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…

elementplus-vue-审核按钮-对话框(Dialog )

效果图&#xff1a; 代码&#xff1a; <template> <el-button type"success" click"dialogVisible true" :icon"Edit">审核</el-button> <el-dialog v-model"dialogVisible" title"是否通过" width&q…

公链角逐中突围,Solana 何以成为 Web3 世界的流量焦点?

在众多区块链公链中&#xff0c;Solana 凭借其创纪录的处理速度和极低的交易费用&#xff0c;成为了众多开发者和投资者的宠儿。就像网络上流行的那句话所说&#xff1a;“Why slow, when you can Solana?”&#xff0c;Solana 正以它的速度和强大的生态系统&#xff0c;重新定…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…