当前位置: 首页 > news >正文

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查询字符串
AndfindByNameAndPrice{ “query” : {“bool” : {“must” : [{ “query_string” : { “query” : “?”, “fields” : [ “name” ] } },{“query_string” : { “query” : “?”, “fields” : [ “price” ] } }]}}}
OrfindByNameOrPrice{“query”:{“bool”:{“should”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}},{“query_string”:{“query”:“?”,“fields”:[“price”]}}]}}}
IsfindByName{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}}
NotfindByNameNot{“query”:{“bool”:{“must_not”:[{“query_string”:{“query”:“?”,“fields”:[“name”]}}]}}}
BetweenfindByPriceBetween{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}
LessThanfindByPriceLessThan{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:false}}}]}}}
LessThanEqualfindByPriceLessThanEqual{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}
GreaterThanfindByPriceGreaterThan{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:false,“include_upper”:true}}}]}}}
GreaterThanEqualfindByPriceGreaterThanEqual{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}}
BeforefindByPriceBefore{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:null,“to”:“?”,“include_lower”:true,“include_upper”:true}}}]}}}
AfterfindByPriceAfter{“query”:{“bool”:{“must”:[{“range”:{“price”:{“from”:“?”,“to”:null,“include_lower”:true,“include_upper”:true}}}]}}}
LikefindByNameLike{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
StartingWithfindByNameStartingWith{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“?*”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
EndingWithfindByNameEndingWith{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“*?”,“fields”:[“name”]},“analyze_wildcard”:true}]}}}
Contains/ContainingfindByNameContaining{“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”:[“?”,“?”]}}]}}]}}}
InfindByNameIn(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”:[“?”,“?”]}}]}}]}}}
NotInfindByNameNotIn(Collectionnames){“query”: {“bool”: {“must”: [{“query_string”: {“query”: “NOT(”?" “?”)", “fields”: [“name”]}}]}}}
TruefindByAvailableTrue{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}}}
FalsefindByAvailableFalse{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“false”,“fields”:[“available”]}}]}}}
OrderByfindByAvailableTrueOrderByNameDesc{“query”:{“bool”:{“must”:[{“query_string”:{“query”:“true”,“fields”:[“available”]}}]}},“sort”:[{“name”:{“order”:“desc”}}]}
ExistsfindByNameExists{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}
IsNullfindByNameIsNull{“query”:{“bool”:{“must_not”:[{“exists”:{“field”:“name”}}]}}}
IsNotNullfindByNameIsNotNull{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}
IsEmptyfindByNameIsEmpty{“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“exists”:{“field”:“name”}}],“must_not”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}]}}}
IsNotEmptyfindByNameIsNotEmpty{“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模块支持所有基本的查询构建功能&#xff0c;如字符串查询、native搜索查询、基于条件的查询和从方法名派生的查…...

PyTorch 深度学习(GPT 重译)(四)

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

视频无水印批量下载软件|抖音视频提取工具

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

【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git

目录 ​编辑 Linux 软件包管理器 yum 软件包: 操作&#xff1a; 拓展&#xff1a;lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…...

小程序中实现轮播图左向堆叠

1、效果图&#xff1a; 轮播图左向堆叠 2、封装的组件&#xff1a; my-swiper.wxml <view><view class"tower-swiper" bindtouchend"TowerEnd"><view class"tower-item" wx:for"{{swiperList}}" wx:key"index&q…...

零基础入门数据挖掘系列之「建模调参」

摘要&#xff1a;对于数据挖掘项目&#xff0c;本文将学习如何建模调参&#xff1f;从简单的模型开始&#xff0c;如何去建立一个模型&#xff1b;如何进行交叉验证&#xff1b;如何调节参数优化等。 建模调参&#xff1a;特征工程也好&#xff0c;数据清洗也罢&#xff0c;都是…...

如何在Mac中删除照片?这里有详细步骤

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

Qt笔记 事件处理_鼠标事件

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

【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服务服务器&#xff1a; Windows 2019服务器上安装NFS服务器资源管理器 创建目录比如D:\nfshare, 鼠标邮件菜单 点击 属性&#xff0c;进行NFS共享 使用NFS服务的客户端&#xff1a; 另外一台Windows服务器&#xff0c;需要安装NFS客户端 具体操作&#xff1a;Window…...

元素定位之xpath和css

元素定位 xpath绝对路径相对路径案例xpath策略&#xff08;路径&#xff09;案例xpath策略&#xff08;层级、扩展&#xff09;属性层级与属性层级与属性拓展层级与属性综合 csscss选择器&#xff08;id、类、标签、属性&#xff09;id选择器类选择器标签选择器属性选择器案例-…...

JavaScript 什么是纯函数,有哪些常见的纯函数

什么是纯函数 纯函数是指那些不依赖于外部状态&#xff0c;也不改变外部状态的函数。在JavaScript中&#xff0c;纯函数的返回值仅由其输入参数决定&#xff0c;而且执行纯函数不会产生副作用&#xff0c;比如修改全局变量或修改传入的参数。 常见的纯函数 JavaScript中一些常…...

c++ 指针大小

C的一个指针占内存几个字节&#xff1f; 结论&#xff1a; 取决于是64位编译模式还是32位编译模式&#xff08;注意&#xff0c;和机器位数没有直接关系&#xff09; 在64位编译模式下&#xff0c;指针的占用内存大小是8字节在32位编译模式下&#xff0c;指针占用内存大小是4字…...

IBM SPSS Statistics:提升数据处理效率的利器

IBM SPSS Statistics软件是一款功能强大的统计软件平台&#xff0c;广泛应用于学术研究、市场调查、数据挖掘和业务决策等领域。其主要功能特色体现在以下几个方面&#xff1a; 基础描述统计功能&#xff1a;软件提供平均值、众数、标准差、百分位数等多种常用的统计数值&#…...

is ignored, because it exists, maybe from xml file

1、问题概述&#xff1f; springboot整合mybatisplus启动的时候报错信息如下&#xff1a; 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扫…...

云蜜罐技术(德迅猎鹰)诞生

数字化程度高且高价值信息密集的行业&#xff0c;如金融、能源、互联网、政府、教育、医疗、军工等行业&#xff0c;面对日益规模化、专业化的网络攻击&#xff0c;渐渐不再满足于一味的防守加固。除了巩固防线之外&#xff0c;他们愈发看重主动出击、感知更大范围内的攻击&…...

ARM:汇编点灯

.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...