Spring Data访问Elasticsearch----查询方法
Spring Data访问Elasticsearch----查询方法
- 一、查询lookup策略
- 1.1 声明的查询
- 二、创建查询
- 三、方法返回类型
- 四、使用@Query注解
一、查询lookup策略
Elasticsearch模块支持所有基本的查询构建功能,如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查询。
1.1 声明的查询
从方法名称派生查询并不总是足够的,并且可能导致方法名称不可读。在这种情况下,可以使用@Query注解(请参见四、使用@Query注解)。
二、创建查询
通常,Elasticsearch的查询创建机制如定义查询方法中描述的那样工作。下面是一个简短的示例,说明了Elasticsearch查询方法的含义:
例1:从方法名创建查询
interface BookRepository extends Repository<Book, String> {List<Book> findByNameAndPrice(String name, Integer price);
}
上面的方法名将被转换为下面的Elasticsearch json查询
{"query": {"bool" : {"must" : [{ "query_string" : { "query" : "?", "fields" : [ "name" ] } },{ "query_string" : { "query" : "?", "fields" : [ "price" ] } }]}}
}
Elasticsearch支持的关键字列表如下所示。
表1:方法名称中支持的关键字
关键字 | 例子 | Elasticsearch查询字符串 |
---|---|---|
And | findByNameAndPrice | { “query” : {“bool” : {“must” : [{ “query_string” : { “query” : “?”, “fields” : [ “name” ] } },{“query_string” : { “query” : “?”, “fields” : [ “price” ] } }]}}} |
Or | findByNameOrPrice | {“query”:{“bool”:{“should”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}},{“query_string”:{“query”:“?”,“fields”:[“price”]}}]}}} |
Is | findByName | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}} |
Not | findByNameNot | {“query”:{“bool”:{“must_not”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}} |
Between | findByPriceBetween | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}} |
LessThan | findByPriceLessThan | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:false}}}]}}} |
LessThanEqual | findByPriceLessThanEqual | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}} |
GreaterThan | findByPriceGreaterThan | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:false,“include_upper”:true}}}]}}} |
GreaterThanEqual | findByPriceGreaterThanEqual | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}} |
Before | findByPriceBefore | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}} |
After | findByPriceAfter | {“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}} |
Like | findByNameLike | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}} |
StartingWith | findByNameStartingWith | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}} |
EndingWith | findByNameEndingWith | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“*?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}} |
Contains/Containing | findByNameContaining | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}} |
In (when annotated as FieldType.Keyword) | findByNameIn(Collection<String> names) | {“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“terms”:{“name”:[“?”,“?”]}}]}}]}}} |
In | findByNameIn(Collection<String> names) | { “query”: {“bool”: {“must”: [{“query_string”:{“query”: “”?" “?”", “fields”: [“name”]}}]}}} |
NotIn (when annotated as FieldType.Keyword) | findByNameNotIn(Collection<String> names) | {“query”:{“bool”:{“must”:[{“bool”:{“must_not”:[{“terms”:{“name”:[“?”,“?”]}}]}}]}}} |
NotIn | findByNameNotIn(Collectionnames) | {“query”: {“bool”: {“must”: [{“query_string”: {“query”: “NOT(”?" “?”)", “fields”: [“name”]}}]}}} |
True | findByAvailableTrue | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}}} |
False | findByAvailableFalse | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“false”,“fields”:[“available”]}}]}}} |
OrderBy | findByAvailableTrueOrderByNameDesc | {“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}},“sort”:[{“name”:{“order”:“desc”}}]} |
Exists | findByNameExists | {“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}} |
IsNull | findByNameIsNull | {“query”:{“bool”:{“must_not”:[{“exists”:{“field”:“name”}}]}}} |
IsNotNull | findByNameIsNotNull | {“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}} |
IsEmpty | findByNameIsEmpty | {“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“exists”:{“field”:“name”}}],“must_not”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}]}}} |
IsNotEmpty | findByNameIsNotEmpty | {“query”:{“bool”:{“must”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}} |
不支持使用GeoJson参数构建Geo-shape查询的方法名。如果您需要在存储库中拥有这样的函数,请在自定义存储库实现中使用ElasticsearchOperations和CriteriaQuery。
三、方法返回类型
存储库方法可以定义为具有以下返回类型以返回多个元素:
- List<T>
- Stream<T>
- SearchHits<T>
- List<SearchHit<T>>
- Stream<SearchHit<T>>
- SearchPage<T>
四、使用@Query注解
例2:使用@Query注解在方法上声明query
传递给该方法的参数可以插入到查询字符串中的占位符中。第一个、第二个、第三个参数的占位符形式为?0、?1、?2等。
interface BookRepository extends ElasticsearchRepository<Book, String> {@Query("{\"match\": {\"name\": {\"query\": \"?0\"}}}")Page<Book> findByName(String name,Pageable pageable);
}
设置为注解参数的String必须是一个有效的Elasticsearch JSON查询。它将作为查询元素的值发送给Elasticsearch;例如,如果使用参数John调用函数,它将产生以下查询体:
{"query": {"match": {"name": {"query": "John"}}}
}
例3:使用Collection参数的方法上的@Query注解
@Query("{\"ids\": {\"values\": ?0 }}")
List<SampleEntity> getByIds(Collection<String> ids);
像上面这样的存储库方法将进行ID查询以返回所有匹配的文档。因此,调用List为[“id1”、“id2”、“id3”]的方法将生成查询体
{"query": {"ids": {"values": ["id1", "id2", "id3"]}}
}
相关文章:
Spring Data访问Elasticsearch----查询方法
Spring Data访问Elasticsearch----查询方法 一、查询lookup策略1.1 声明的查询 二、创建查询三、方法返回类型四、使用Query注解 一、查询lookup策略 Elasticsearch模块支持所有基本的查询构建功能,如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查…...

PyTorch 深度学习(GPT 重译)(四)
第二部分:从现实世界的图像中学习:肺癌的早期检测 第 2 部分的结构与第 1 部分不同;它几乎是一本书中的一本书。我们将以几章的篇幅深入探讨一个单一用例,从第 1 部分学到的基本构建模块开始,构建一个比我们迄今为止看…...

视频无水印批量下载软件|抖音视频提取工具
视频无水印批量下载软件 在当今社交媒体充斥着大量优质视频内容的时代,很多用户都希望能够轻松下载自己喜爱的视频进行收藏或分享。为了满足用户的需求,我们特别推出了一款专业的视频无水印批量下载软件,让您可以方便快捷地获取喜爱的视频内容…...

【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git
目录 编辑 Linux 软件包管理器 yum 软件包: 操作: 拓展:lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…...
小程序中实现轮播图左向堆叠
1、效果图: 轮播图左向堆叠 2、封装的组件: my-swiper.wxml <view><view class"tower-swiper" bindtouchend"TowerEnd"><view class"tower-item" wx:for"{{swiperList}}" wx:key"index&q…...

零基础入门数据挖掘系列之「建模调参」
摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型;如何进行交叉验证;如何调节参数优化等。 建模调参:特征工程也好,数据清洗也罢,都是…...

如何在Mac中删除照片?这里有详细步骤
前言 本文介绍如何从Mac中删除照片,以释放硬盘空间或更好地组织文件和文件夹。 如何使用废纸篓删除Mac上的图片 在Mac上删除图片的最简单方法之一是使用废纸篓功能。学习只需几秒钟。下面是如何删除单个图片以及如何在Mac上删除多个图片,以及一些关键和有用的提示,以使该…...

Qt笔记 事件处理_鼠标事件
什么是事件? 点击鼠标左键,双击鼠标左键,鼠标来回移动,按下键盘按钮,这些都是事件。 那么事件的响应机制是什么样的呢? 首先main函数中有一个QApplication,其作用是创建一个应用程序对象&…...

【Vue】三、使用ElementUI实现图片上传
目录 一、前端代码实现 二、后端代码实现 三、调试效果实现 一、前端代码实现 废话不多说直接上代码 <el-form-item prop"image" label"上传图片" v-model"form.image"><el-upload:action"http://localhost:8…...
ffmpeg的ffprobe.exe查询修改视频信息
# 查询视频信息 ffprobe -i 1.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2, from video.mp4:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.20.100comment : 123654Duration: 00:00:15.21, start: 0.0…...

Windows 2019服务器上安装NFS服务器
提供NFS服务服务器: Windows 2019服务器上安装NFS服务器资源管理器 创建目录比如D:\nfshare, 鼠标邮件菜单 点击 属性,进行NFS共享 使用NFS服务的客户端: 另外一台Windows服务器,需要安装NFS客户端 具体操作:Window…...

元素定位之xpath和css
元素定位 xpath绝对路径相对路径案例xpath策略(路径)案例xpath策略(层级、扩展)属性层级与属性层级与属性拓展层级与属性综合 csscss选择器(id、类、标签、属性)id选择器类选择器标签选择器属性选择器案例-…...
JavaScript 什么是纯函数,有哪些常见的纯函数
什么是纯函数 纯函数是指那些不依赖于外部状态,也不改变外部状态的函数。在JavaScript中,纯函数的返回值仅由其输入参数决定,而且执行纯函数不会产生副作用,比如修改全局变量或修改传入的参数。 常见的纯函数 JavaScript中一些常…...

c++ 指针大小
C的一个指针占内存几个字节? 结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系) 在64位编译模式下,指针的占用内存大小是8字节在32位编译模式下,指针占用内存大小是4字…...

IBM SPSS Statistics:提升数据处理效率的利器
IBM SPSS Statistics软件是一款功能强大的统计软件平台,广泛应用于学术研究、市场调查、数据挖掘和业务决策等领域。其主要功能特色体现在以下几个方面: 基础描述统计功能:软件提供平均值、众数、标准差、百分位数等多种常用的统计数值&#…...
is ignored, because it exists, maybe from xml file
1、问题概述? springboot整合mybatisplus启动的时候报错信息如下: 2024-03-20 10:12:19.239 ERROR 17840 --- [ main] c.b.m.core.MybatisConfiguration : mapper[com.hazq.hazqoa.mapper.DutyTrunsMapper.dutyTrunsExistence] is …...
Spark面试整理-Spark是什么?
Apache Spark是一个开源的分布式计算系统,它提供了一个用于大规模数据处理的快速、通用、易于使用的平台。它最初是在加州大学伯克利分校的AMPLab开发的,并于2010年开源。自那时起,Spark已经成为大数据处理中最受欢迎和广泛使用的框架之一。下面是Spark的一些关键特点: 速度…...
Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化
1.前言 在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫…...

云蜜罐技术(德迅猎鹰)诞生
数字化程度高且高价值信息密集的行业,如金融、能源、互联网、政府、教育、医疗、军工等行业,面对日益规模化、专业化的网络攻击,渐渐不再满足于一味的防守加固。除了巩固防线之外,他们愈发看重主动出击、感知更大范围内的攻击&…...
ARM:汇编点灯
.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来,保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
Springboot多数据源配置实践
Springboot多数据源配置实践 基本配置文件数据库配置Mapper包Model包Service包中业务代码Mapper XML文件在某些复杂的业务场景中,我们可能需要使用多个数据库来存储和管理不同类型的数据,而不是仅仅依赖于单一数据库。本技术文档将详细介绍如何在 Spring Boot 项目中进行多数…...