springdata框架对es集成

2024-03-29 05:04
文章标签 es 框架 集成 springdata

本文主要是介绍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集成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857671

相关文章

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

使用vscode搭建pywebview集成vue项目实践

《使用vscode搭建pywebview集成vue项目实践》:本文主要介绍使用vscode搭建pywebview集成vue项目实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录环境准备项目源码下载项目说明调试与生成可执行文件核心代码说明总结本节我们使用pythonpywebv

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o