spring-data-elasticsearch官方文档解读(部分)

Spring Data Elasticsearch

这里主要学习的是4.4.16版本的文档

1. 版本

下表显示了 Spring Data 发行版系列使用的 Elasticsearch 版本和其中包含的 Spring Data Elasticsearch 版本,以及引用该特定 Spring Data 发行版系列的 Spring Boot 版本。给出的 Elasticsearch 版本显示了 Spring Data Elasticsearch 是使用哪些客户端库构建和测试的。

Spring Data Release Train

Spring Data Elasticsearch

Elasticsearch

Spring Framework

Spring Boot

2023.0 (Ullmann)

5.1.x

8.7.1

6.0.x

3.1.x

2022.0 (Turing)

5.0.x

8.5.3

6.0.x

3.0.x

2021.2 (Raj)

4.4.x[1]

7.17.3

5.3.x

2.7.x

2021.1 (Q)

4.3.x[1]

7.15.2

5.3.x

2.6.x

2021.0 (Pascal)

4.2.x[1]

7.12.0

5.3.x

2.5.x

2020.0 (Ockham)

4.1.x[1]

7.9.3

5.3.2

2.4.x

Neumann

4.0.x[1]

7.6.2

5.2.12

2.3.x

Moore

3.2.x[1]

6.8.12

5.2.12

2.2.x

Lovelace

3.1.x[1]

6.2.2

5.1.19

2.1.x

Kay

3.0.x[1]

5.5.0

5.0.13

2.0.x

Ingalls

2.1.x[1]

2.4.0

4.3.25

1.5.x

2. Working with Spring Data Repositories

1. Repositories

Spring Data Elasticsearch - Reference Documentation

Spring Data的repository抽象的中心接口是Repository,它是一个泛型接口,需要指定domain类和唯一标识的类型。该接口主要充当标记接口,用于捕获要使用的类型并帮助您发现扩展该接口的接口。

  • CrudRepository接口为管理的实体类提供了复杂的CRUD操作
  • PagingAndSortingRepository接口在CRUD的基础上,增加了分页查询和排序功能

Spring Data Elasticsearch - Reference Documentation

2.1. Query methods

2.1.1. Query creation

自定义接口并继承ElasticsearchRepository接口,通过定义的方法名就能自动创建各种查询。

例子:

interface BookRepository extends Repository<Book, String> {
  List<Book> findByNameAndPrice(String name, Integer price);
}

The method name above will be translated into the following Elasticsearch json query:

{
    "query": {
        "bool" : {
            "must" : [
                { "query_string" : { "query" : "?", "fields" : [ "name" ] } },
                { "query_string" : { "query" : "?", "fields" : [ "price" ] } }
            ]
        }
    }
}

Supported keywords inside method names:

Keyword

Sample

Elasticsearch Query String

And

findByNameAndPrice

{"bool" : {"must" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}}

Or

findByNameOrPrice

{"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}}

Is

findByName

{"bool" : {"must" : {"field" : {"name" : "?"}}}}

Not

findByNameNot

{"bool" : {"must_not" : {"field" : {"name" : "?"}}}}

Between

findByPriceBetween

{"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}

LessThanEqual

findByPriceLessThan

{"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}

GreaterThanEqual

findByPriceGreaterThan

{"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}}

Before

findByPriceBefore

{"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}}

After

findByPriceAfter

{"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}}

Like

findByNameLike

{"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}}

StartingWith

findByNameStartingWith

{"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}}

EndingWith

findByNameEndingWith

{"bool" : {"must" : {"field" : {"name" : {"query" : "*?","analyze_wildcard" : true}}}}}

Contains/Containing

findByNameContaining

{"bool" : {"must" : {"field" : {"name" : {"query" : "*?*","analyze_wildcard" : true}}}}}

In

findByNameIn(Collection<String>names)

{"bool" : {"must" : {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"name" : "?"}} ]}}}}

NotIn

findByNameNotIn(Collection<String>names)

{"bool" : {"must_not" : {"bool" : {"should" : {"field" : {"name" : "?"}}}}}}

Near

findByStoreNear

Not Supported Yet !

True

findByAvailableTrue

{"bool" : {"must" : {"field" : {"available" : true}}}}

False

findByAvailableFalse

{"bool" : {"must" : {"field" : {"available" : false}}}}

OrderBy

findByAvailableTrueOrderByNameDesc

{"sort" : [{ "name" : {"order" : "desc"} }],"bool" : {"must" : {"field" : {"available" : true}}}}

通过方法名派生的查询可能导致可读性降低,也可以实现@Query注解声明query。

如:

interface BookRepository extends ElasticsearchRepository<Book, String> {
    @Query("{\"match\": {\"name\": {\"query\": \"?0\"}}}")
    Page<Book> findByName(String name,Pageable pageable);
}

2.1.2. Method return types

为了返回多个元素,Repository接口方法可被定义为如下返回值类型

  • List<T>
  • Stream<T>
  • SearchHits<T>
  • List<SearchHit<T>>
  • Stream<SearchHit<T>>
  • SearchPage<T>

3. Elasticsearch Object Mapping

Spring Data Elasticsearch - Reference Documentation

Spring Data Elasticsearch 对象映射是将 Java 对象(域实体)映射到存储在 Elasticsearch 中的 JSON 表示形式并映射回来的过程。

3.1. Mapping Annotation

MappingElasticsearchConverter使用元数据来驱动对象到文档的映射,元数据取自被注解的实体属性。

如下是常用的注解:

注解

用途

常用参数

@Document

在类级别应用以指示该类是映射到数据库的候选类。

indexName:存储该实体类的ES index

createIndex

createIndex:是否自动创建索引,默认为true

@Id

应用于字段上,标记该字段为唯一标识

无参数

@Field

应用于字段上,定义字段的属性

name:该字段在ES中的名称,默认为Java实体类字段名

type:文档中字段的类型,类型很多,具体参考官网,常用的有:Text, Keyword, Long, Integer, Short, Byte, Double, Float, Boolean, Date

store: Flag whether the original field value should be store in Elasticsearch, default value is false.

analyzer:分词器

@Setting

索引设置

Spring Data Elasticsearch - Reference Documentation

shards:分片数,默认为1
replicas:副本数量,默认为1

4. 配置

4.1. 使用配置类

@Configuration
@EnableElasticsearchRepositories(basePackages = "org.springframework.data.elasticsearch.repository")
public class ElasticsearchConfiguration extends AbstractElasticsearchConfiguration {
    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {

        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();

        return RestClients.create(clientConfiguration).rest();
    }
}

问题1: elasticsearch在配置文件中写了连接配置还需要写elasticsearch配置类吗

在Spring Boot应用程序中,通常你不需要显式编写一个独立的Elasticsearch配置类,因为Spring Boot已经提供了自动配置来处理Elasticsearch连接。当你在application.propertiesapplication.yml中提供了Elasticsearch连接信息时,Spring Boot会根据这些属性自动配置Elasticsearch连接。

问题2:spring.data.elasticsearch.repositories.enabled是什么属性?

spring.data.elasticsearch.repositories.enabled是一个Spring Boot属性,用于控制是否启用Spring Data Elasticsearch存储库(Repositories)。默认情况下,Spring Boot会自动检测你的项目中是否存在继承ElasticsearchRepository的接口,如果存在,则自动配置并启用Spring Data Elasticsearch存储库。

4.2. 在yml文件中添加配置属性

由上述两个问题可以得知,只需要配置spring.elasticsearch.uris属性,即可。

因为默认情况下,Spring Boot会自动检测你的项目中是否存在继承ElasticsearchRepository的接口,如果存在,则自动配置并启用Spring Data Elasticsearch存储库

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【APP逆向】酒仙网预约茅台程序,包含逆向过程详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:爬虫实战,零基础、进阶教学 景天的主页:景天科技苑 文章目录 酒仙网预约抢购茅台1.抓包分析,账户名和密码登录2.短信登录3.登录+茅台预约 密码登录酒仙网预约抢购茅台 目标:账号登…

MVO-CNN-LSTM多输入时序预测|多元宇宙优化算法-卷积-长短期神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&a…

mysql题库详解

1、如何创建和删除数据库&#xff1f; 创建数据库 CREATE DATABASE 数据库名; 删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别&#xff1f; 1&#xff09;事务&#xff1a;MyISAM 不支持事务 InnoDB 支持 2&#xff09;行锁/表锁&#xff1a;MyISAM 支持表级锁…

力扣---最小栈

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据&#xff0c;会将key全都当成Object处理&#xff0c;从而按照对象的方式转成json格式发送到服务器&#xff0c;这样会导致两个问题。一是不方便阅读&#xff0c;二是会大大浪费内存。因此&#xff0c;建议自定义…

js 添加、删除DOM元素

1. js添加、删除DOM元素 1.1. 添加DOM元素 1.1.1. appendChild()方法 该方法添加的元素位于父元素的末尾&#xff0c;使用方法&#xff1a; parentNode.appenChild(NewNode) // parentNode是需要添加元素的容器&#xff0c;NewNode是新添加的元素   创建一个li元素并添加到…

阿里云-零基础入门推荐系统 【多路召回】

文章目录 赛题介绍评价方式理解赛题理解多路召回 代码实战导包读取数据读取文章的基本属性读取文章的Embedding数据调用定义函数获取用户-文章-时间函数获取文章-用户-时间函数获取历史和最后一次点击获取文章属性特征获取用户历史点击的文章信息获取点击次数最多的topk个文章定…

【数据库】软件测试之MySQL数据库面试总结

有表如下&#xff1a; Student 学生表 SC 成绩表 Course 课程表 Teacher 老师表 每个学生可以学习多门课程&#xff0c;每一个课程都有得分&#xff0c;每一门课程都有老师来教&#xff0c;一个老师可以教多个学生 1、查询姓‘朱’的学生名单 select * from Student whe…

直播录屏软件电脑版盘点,哪个才是你的最佳选择?

随着网络直播的兴起&#xff0c;录屏功能逐渐成为了许多用户电脑上的必备工具。无论是为了记录游戏过程、制作教学视频&#xff0c;还是为了保存会议内容&#xff0c;一个易于操作且功能全面的录屏软件都是不可或缺的。那直播录屏软件电脑版都有哪些呢&#xff1f;本文将为大家…

安卓项目:app注册/登录界面设计

目录 第一步&#xff1a;设计视图xml 第二步&#xff1a;编写登录和注册逻辑代码 运行效果展示&#xff1a; 总结&#xff1a; 提前展示项目结构&#xff1a; 第一步&#xff1a;设计视图xml 在layout目录下面创建activity_login.xml和activity_main.xml文件 activity_lo…

GEE错误——Landsat 9 数据集(LANDSAT/LC09/C02/T1_L2)ST_10波段缺少影像问题如何处理

简介 Landat 9的数据集是由卫星传感器记录并传输的。ST_10波段是其中一个波段,但是如果这个波段的影像数据缺失,可能是由于各种原因导致的。 以下是一些可能导致ST_10波段影像数据缺失的原因: 1. 传感器故障:可能是传感器在记录或传输过程中发生了故障,导致无法正确记录…

重要通告 | 公司更名为“浙江实在智能科技有限公司”

更名公告 升级蜕变、砥砺前行 因业务快速发展和战略升级&#xff0c;经相关政府机构批准&#xff0c;自2024年3月1日起&#xff0c;原“杭州实在智能科技有限公司”正式更名为“浙江实在智能科技有限公司”。 更名后&#xff0c;公司统一社会信用代码不变&#xff0c;业务主体…

【vue3之Pinia:状态管理工具】

Pinia:状态管理工具 一、认识Pinia二、定义store三、gettters四、Action1.定义普通函数2.异步实现 五、storeToRefs工具函数六、pinia持久化插件1. 安装插件2. main.js 使用3. 开启4.其他配置 一、认识Pinia Pinia 是 Vue 的最新 状态管理工具 &#xff0c;是 Vuex 的 替代品 …

关于多权威属性加密论文阅读

来源于2007年Multi-authority Attribute Based Encryption 从单权威机构到多权威机构的意义是什么呢&#xff1f; 基础方案&#xff08;单权威方案SW&#xff09;支持数据持有者对数据进行加密使用指定的属性集合并且指定一个数值d。当一个用户需要使用该数据时&#xff0c;需…

盘点CSV文件在Excel中打开后乱码问题的两种处理方法

目录 一、CSV文件乱码问题概述 二、修改文件编码格式 1.识别CSV文件编码 2.修改编码格式 3.在Excel中打开修改后的CSV文件 案例 三、利用文本编辑器进行预处理 1.打开CSV文件并检查乱码 2.替换或删除乱码字符 3.保存并导入Excel 案例 四、注意事项 1、识别原始编码…

【机器学习】有监督学习算法之:逻辑回归

逻辑回归 1、引言2、逻辑回归2.1 定义2.2 基本原理2.3 公式2.3.1 核心公式2.3.2 Sigmoid函数 2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;鱼哥&#xff0c;求助 小鱼&#xff1a;咋了。 小屌丝&#xff1a;我被逻辑回归难住了。 小鱼&#xff1a;然后你…

数据结构 - 堆

这篇博客将介绍堆的概念以及堆的实现。 1. 堆的定义&#xff1a; 首先堆的元素按照是完全二叉树的顺序存储的。 且堆中的某个节点总是不大于或不小于其父节点的值。 根节点最大的堆叫做大堆&#xff0c;根节点最小的堆叫小堆。逻辑结构如下图所示&#xff1a; 大堆和小堆的…

ZJUBCA研报分享 | 《BTC/USDT周内效应研究》

ZJUBCA研报分享 引言 2023 年 11 月 — 2024 年初&#xff0c;浙大链协顺利举办为期 6 周的浙大链协加密创投训练营 &#xff08;ZJUBCA Community Crypto VC Course&#xff09;。在本次训练营中&#xff0c;我们组织了投研比赛&#xff0c;鼓励学员分析感兴趣的 Web3 前沿话题…

opencv解析系列 - 基于DOM提取大面积植被(如森林)

Note&#xff1a;简单提取&#xff0c;不考虑后处理&#xff08;填充空洞、平滑边界等&#xff09; #include <iostream> #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <opencv2/opencv.hpp> using namespace cv…

Ajax (1)

什么是Ajax&#xff1a; 浏览器与服务器进行数据通讯的技术&#xff0c;动态数据交互 axios库地址&#xff1a; <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> 如何使用呢&#xff1f; 我们现有个感性的认识 <scr…