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为输出…...
IDE高效开发配置:使用IDEA进行cv_resnet101_face-detection模型Python后端调试
IDE高效开发配置:使用IDEA进行cv_resnet101_face-detection模型Python后端调试 你是不是也遇到过这种情况?在本地电脑上写好了人脸检测模型的代码,一跑起来,要么是速度慢得像蜗牛,要么是内存直接爆掉。想用服务器的GP…...
AI生成代码真的可靠吗?揭秘可维护性衰减的72小时临界点及4步修复法
第一章:AI生成代码真的可靠吗?揭秘可维护性衰减的72小时临界点及4步修复法 2026奇点智能技术大会(https://ml-summit.org) 大量工程实践表明,AI生成的代码在交付后第72小时左右进入可维护性断崖式衰减期——此时原始提示上下文已丢失、变量…...
计算机视觉中的图像识别与理解
计算机视觉中的图像识别与理解 在人工智能飞速发展的今天,计算机视觉已成为最受关注的技术领域之一。图像识别与理解作为其核心任务,旨在让机器像人类一样“看懂”图像内容,并从中提取有价值的信息。从智能手机的人脸解锁到自动驾驶的环境感…...
为什么你的Copilot总“读懂又读错”?2026奇点大会披露的语义锚点漂移问题,正在摧毁千万行生产代码!
第一章:2026奇点智能技术大会:AI代码摘要 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次发布开源工具链 CodeLens-26,专为大规模AI生成代码的语义摘要与可信验证设计。其核心能力在于跨语言上下文感知摘要——可自动识别函数意…...
主流AI培训机构技术栈与教学模式横向评测:面向开发者的选型参考
引言:从技术焦虑到能力构建的十字路口随着生成式AI技术的爆炸式发展,从底层模型架构(如Transformer)到上层应用开发(如智能体、多模态生成),技术栈迭代速度前所未有。广大开发者与技术人员正面临…...
Bili2text:如何用3分钟将B站视频转为可编辑文字稿
Bili2text:如何用3分钟将B站视频转为可编辑文字稿 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为整理B站网课笔记而反复拖动进度条&am…...
AGI研发已无“安全窗口期”:从GPT-5延迟到中国“伏羲计划”提速,90天内5国密集调整国家级AGI战略(附原始政策文本对照表)
第一章:AGI研发的国际竞争格局 2026奇点智能技术大会(https://ml-summit.org) 全球通用人工智能(AGI)研发已进入国家战略竞速阶段,美、中、欧、日、韩等主要经济体正通过顶层政策设计、算力基建投入、基础模型开源生态与人才战略…...
360的江湖:3721靠AI起家却贱卖十亿,亲手喂饱了百度
Mysql公司够强大吧,2008年左右卖了70亿人民币。实际这是一个商业公司,3个创始人只有不到5%股份,Mysql之父Monty,只分到1.2亿元。创业不易呀,多次融资,公司也成了资本的,拿走了90%的利润。一、37…...
ChampR:打破英雄联盟数据孤岛,构建智能化游戏决策助手
ChampR:打破英雄联盟数据孤岛,构建智能化游戏决策助手 【免费下载链接】champr 🐶 Yet another League of Legends helper 项目地址: https://gitcode.com/gh_mirrors/ch/champr 在英雄联盟的竞技世界中,每个玩家都面临着相…...
SYN6288语音合成模块避坑指南:ESP32-S串口通信失败,我用MAX2323解决了
SYN6288语音合成模块实战:ESP32-S串口通信故障排查与电平转换方案 当你在智能硬件项目中尝试集成语音合成功能时,SYN6288模块因其高性价比和中文支持成为热门选择。但很多开发者第一次将3.3V的ESP32-S与5V供电的SYN6288连接时,会遇到一个典型…...
