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为输出…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
