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

Spring Data Elasticsearch查询方法大全:从简单查询到复杂聚合的10个实战案例

Spring Data Elasticsearch查询方法大全从简单查询到复杂聚合的10个实战案例【免费下载链接】spring-data-elasticsearchProvide support to increase developer productivity in Java when using Elasticsearch. Uses familiar Spring concepts such as a template classes for core API usage and lightweight repository style data access.项目地址: https://gitcode.com/gh_mirrors/sp/spring-data-elasticsearchSpring Data Elasticsearch是一个强大的框架它将Spring的数据访问模式与Elasticsearch的搜索引擎功能完美结合为Java开发者提供了简洁高效的Elasticsearch操作方式。本文将通过10个实战案例全面介绍从基础查询到高级聚合分析的各种查询方法帮助开发者快速掌握Spring Data Elasticsearch的核心查询技巧。1. 基础查询使用Repository接口实现简单查询Spring Data Elasticsearch最直观的查询方式是通过定义Repository接口。只需创建一个继承ElasticsearchRepository的接口即可获得基本的CRUD操作。例如public interface BookRepository extends ElasticsearchRepositoryBook, String { // 自动生成查询方法 ListBook findByTitleContaining(String keyword); ListBook findByAuthorAndPriceLessThan(String author, Double price); }这种方法的核心是方法名解析Spring Data会根据方法名自动生成对应的Elasticsearch查询。常用的关键词包括Containing、And、Or、LessThan、GreaterThan等。2. Query注解自定义JSON查询对于复杂查询可以使用Query注解直接编写Elasticsearch JSON查询语句。这种方式给予开发者完全的查询控制权适合实现复杂的业务逻辑。public interface BookRepository extends ElasticsearchRepositoryBook, String { Query({\bool\: {\must\: [{\match\: {\title\: \?0\}}]}}) ListBook findByTitle(String title); Query({\bool\: {\must\: [{\term\: {\category\: \?0\}}], \filter\: [{\range\: {\price\: {\lt\: ?1}}}]}}) ListBook findByCategoryAndPriceLessThan(String category, Double price); }在Query注解中?0、?1等占位符对应方法参数的位置使查询语句可以动态接收参数值。3. NativeQuery构建复杂查询条件当需要在代码中动态构建复杂查询时可以使用NativeQuery类。它提供了流畅的API来构建包含查询条件、排序、分页等的完整查询。NativeQuery query NativeQuery.builder() .withQuery(QueryBuilders.matchQuery(title, spring)) .withSort(Sort.by(price).ascending()) .withPageable(PageRequest.of(0, 10)) .build(); SearchHitsBook searchHits elasticsearchOperations.search(query, Book.class);NativeQuery支持所有Elasticsearch查询类型包括match、term、range、bool等是构建动态查询的理想选择。4. 分页查询高效处理大量数据Spring Data Elasticsearch提供了内置的分页支持通过Pageable接口可以轻松实现查询结果的分页处理。Pageable pageable PageRequest.of(0, 10, Sort.by(publicationDate).descending()); PageBook books bookRepository.findByAuthor(John Doe, pageable); // 分页信息 long totalElements books.getTotalElements(); int totalPages books.getTotalPages(); ListBook content books.getContent();分页查询对于处理大量数据非常重要可以有效控制内存使用和网络传输量。5. 排序查询自定义结果顺序除了在分页中指定排序还可以单独使用排序功能来调整查询结果的顺序。Sort sort Sort.by( Sort.Order.asc(author), Sort.Order.desc(publicationDate) ); ListBook books bookRepository.findByCategory(programming, sort);排序可以基于单个或多个字段每个字段可以指定升序asc或降序desc。6. 聚合查询数据分析与统计Spring Data Elasticsearch支持Elasticsearch的聚合功能可用于复杂的数据分析和统计。通过NativeQuery可以添加各种聚合操作。NativeQuery query NativeQuery.builder() .withQuery(QueryBuilders.matchAllQuery()) .withAggregation(avg_price, AggregationBuilders.avg(price).field(price)) .withAggregation(books_by_category, AggregationBuilders.terms(category).field(category)) .build(); SearchHitsBook searchHits elasticsearchOperations.search(query, Book.class); AggregationsContainer? aggregations searchHits.getAggregations();聚合查询可以实现平均值、总和、计数、分组等多种统计分析功能是数据分析的强大工具。7. 高亮查询突出显示匹配结果高亮查询可以在搜索结果中突出显示匹配的关键词提升用户体验。HighlightQuery highlightQuery new HighlightQuery( new HighlightBuilder().field(title).preTags(em).postTags(/em), new HighlightOptions() ); NativeQuery query NativeQuery.builder() .withQuery(QueryBuilders.matchQuery(title, spring)) .withHighlightQuery(highlightQuery) .build(); SearchHitsBook searchHits elasticsearchOperations.search(query, Book.class); searchHits.forEach(hit - { MapString, ListString highlightFields hit.getHighlightFields(); // 处理高亮结果 });通过高亮查询可以直观地展示搜索关键词在结果中的位置提高搜索体验。8. 复合查询组合多种查询条件使用bool查询可以组合多个查询条件实现复杂的业务逻辑。NativeQuery query NativeQuery.builder() .withQuery(QueryBuilders.boolQuery() .must(QueryBuilders.matchQuery(title, spring)) .must(QueryBuilders.rangeQuery(price).lt(50)) .should(QueryBuilders.termQuery(category, programming)) .filter(QueryBuilders.termQuery(inStock, true)) ) .build();bool查询支持must必须匹配、should应该匹配、mustNot必须不匹配和filter过滤等条件组合。9. 地理位置查询基于位置的搜索Spring Data Elasticsearch对Elasticsearch的地理位置功能提供了良好支持可以实现基于位置的查询。// 存储地理位置信息 Document(indexName locations) public class Location { Id private String id; private String name; GeoPointField private GeoPoint coordinates; // getters and setters } // 地理位置查询 NativeQuery query NativeQuery.builder() .withQuery(QueryBuilders.geoDistanceQuery(coordinates) .point(40.7128, -74.0060) // 纽约坐标 .distance(10, DistanceUnit.KILOMETERS)) .build();地理位置查询在本地服务、配送范围等场景中非常有用。10. reactive查询响应式编程支持对于需要高并发处理的应用Spring Data Elasticsearch提供了响应式编程支持通过ReactiveElasticsearchRepository和ReactiveElasticsearchOperations实现非阻塞查询。public interface ReactiveBookRepository extends ReactiveElasticsearchRepositoryBook, String { FluxBook findByAuthorContaining(String author); } // 使用响应式查询 FluxBook books reactiveBookRepository.findByAuthorContaining(John); books.subscribe(book - System.out.println(book.getTitle()));响应式查询可以显著提高应用的吞吐量和响应性特别适合处理大量并发请求。总结Spring Data Elasticsearch提供了丰富的查询功能从简单的方法名查询到复杂的聚合分析从同步查询到响应式编程满足了各种应用场景的需求。通过本文介绍的10个实战案例开发者可以快速掌握Spring Data Elasticsearch的核心查询技巧为构建高效的搜索应用奠定基础。要开始使用Spring Data Elasticsearch只需克隆仓库并按照官方文档进行配置git clone https://gitcode.com/gh_mirrors/sp/spring-data-elasticsearch通过合理运用这些查询方法可以充分发挥Elasticsearch的强大搜索能力为应用提供高效、精准的搜索体验。无论是小型应用还是大型企业系统Spring Data Elasticsearch都是Java开发者集成Elasticsearch的理想选择。【免费下载链接】spring-data-elasticsearchProvide support to increase developer productivity in Java when using Elasticsearch. Uses familiar Spring concepts such as a template classes for core API usage and lightweight repository style data access.项目地址: https://gitcode.com/gh_mirrors/sp/spring-data-elasticsearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

Spring Data Elasticsearch查询方法大全:从简单查询到复杂聚合的10个实战案例

Spring Data Elasticsearch查询方法大全:从简单查询到复杂聚合的10个实战案例 【免费下载链接】spring-data-elasticsearch Provide support to increase developer productivity in Java when using Elasticsearch. Uses familiar Spring concepts such as a templ…...

linux source命令作用及使用场景

source 是 Linux/Unix 系统中的一个内置 Shell 命令,主要用于在当前 Shell 环境中执行脚本文件(而非启动子 Shell),从而直接影响当前环境(如变量、函数、别名等)。以下是其详细作用及使用场景: …...

雯雯的后宫-造相Z-Image-瑜伽女孩部署避坑指南:xinference.log日志错误排查大全

雯雯的后宫-造相Z-Image-瑜伽女孩部署避坑指南:xinference.log日志错误排查大全 部署一个AI文生图模型,最让人头疼的往往不是写提示词,而是服务启动时那一串串让人摸不着头脑的日志。特别是当你满怀期待地部署“雯雯的后宫-造相Z-Image-瑜伽…...

返回多个值:让函数输出更丰富又不复杂

一般来说,Python允许函数返回多个值,实质是返回一个元组(tuple)。调用方可直接通过拆包获得各值,这在数据处理与建模中非常常见。实战案例:假设你要实现一个数据分析函数,既返回最大值&#xff…...

Python数据标准化全攻略:从原理到实践

在机器学习和数据分析领域,数据标准化是一项至关重要的预处理步骤。它能够将不同尺度的特征统一到相同的范围内,帮助模型更好地学习数据特征,提高训练效率和模型性能。本文将详细介绍数据标准化的概念、常用方法以及在Python中的实现方式。一…...

Midscene + 本地Ollama-Qwen3-VL 部署操作文档(含踩坑指南)

Midscene 本地Ollama-Qwen3-VL 部署操作文档(含踩坑指南) 一、文档说明 本文档适用于 Windows 环境(以暗影精灵11为例:i9-14900HX 32G内存 RTX5070 8G),完整覆盖从环境安装、模型部署、脚本开发到调试…...

暖心指南:儿童心理医院真实案例分享

行业痛点分析当前长沙地区儿童心理健康服务面临多重技术挑战。数据显示,2023年长沙市0-18岁青少年中,约有18.6%存在不同程度的情绪或行为问题,其中焦虑障碍、注意力缺陷多动障碍(ADHD)及学习困难占比超六成&#xff0c…...

LibreCAD:开源2D CAD解决方案的价值与实践指南

LibreCAD:开源2D CAD解决方案的价值与实践指南 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline pri…...

RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践

RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践 1. 为什么需要在K8s中部署RexUniNLU? 你可能已经试过在本地跑通 python test.py,也成功启动了 server.py 提供的 FastAPI 接口。但当真实业务流量进来——比如…...

【Hot 100 刷题计划】 LeetCode 128. 最长连续序列 | C++ 哈希表 O(N) 题解

LeetCode 128. 最长连续序列 | C Set 与哈希表 O(N) 双解法题解 📌 题目描述 题目级别:中等 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度…...

MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践

MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践 1. 引言:当AI走进放射科,我们如何相信它? 想象一下,一位放射科医生每天要面对上百张X光片,每一张都需要仔细查看、分析、撰写报告。长时间高…...

【Hot 100 刷题计划】 LeetCode 438. 找到字符串中所有字母异位词 | C++ 滑动窗口题解

LeetCode 438. 找到字符串中所有字母异位词 | C 固定滑动窗口极致优化题解 📌 题目描述 题目级别:中等 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词&#xff…...

cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比

cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比 1. 项目背景与技术原理 基于UNet架构深度学习模型开发的本地化图像上色工具,采用了阿里魔搭开源的图像上色算法。这个工具能够智能识别黑白图像中的物体特征、自然场景和人…...

Nunchaku-FLUX.1-dev开源镜像部署教程:免编译、免依赖、一键拉起服务

Nunchaku-FLUX.1-dev开源镜像部署教程:免编译、免依赖、一键拉起服务 1. 开篇:为什么你需要这个本地文生图神器? 如果你玩过AI绘画,肯定遇到过这些烦心事:想用国外模型生成中文场景,结果出来的图不伦不类…...

cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册

cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册 本文总计约3800字,完整阅读约需12分钟,包含详细的环境配置、操作步骤和实用技巧,适合零基础用户快速上手。 1. 引言:让黑白照片重现光彩 你…...

Cogito-v1-preview-llama-3B高性能:vLLM Serving + OpenAI兼容API部署教程

Cogito-v1-preview-llama-3B高性能:vLLM Serving OpenAI兼容API部署教程 1. 引言:为什么选择Cogito模型? 如果你正在寻找一个既强大又实用的语言模型,Cogito-v1-preview-llama-3B绝对值得关注。这个模型在同等规模的开源模型中…...

收藏备用!Workflow与Agent详解:小白也能看懂的AI自动化核心(附上手工具)

对于刚接触大模型的小白和程序员来说,Workflow和Agent是AI自动化领域最易混淆、也最核心的两个概念。本文将用通俗的语言拆解二者的核心作用、本质区别,补充实用落地细节,同时推荐新手友好型工具,帮你快速建立体系化认知&#xff…...

若依(ruoyi)RuoYiApp版—页面

ruoyiApp中的页面是一个符合vue规范的文件,如果你熟悉vue,这里将非常快速上手。 1.如何新增页面 uni-app中的页面,默认保存在工程根目录下的pages目录下。 每次新建页面,均需在pages.json中配置pages列表;未在pages.js…...

最好用的服务器文件传输工具:SSHFerry(下载见结尾)

为了 AutoDL 传文件更快更省心,我自己做了个 SSH 工作区:SSHFerry(下载见结尾) 之前我写过一篇和 AutoDL 上传有关的文章,没想到后面慢慢有了 1 万多阅读。 但那篇文章现在回头看,我觉得还是有点不够负责。…...

【力扣hot100】 198. 打家劫舍

一、题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金, 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存…...

安卓音频问题解决记录(一)

本文记录在安卓framework开发过程中遇到的一些音频问题的解决办法。 1.支持多应用同时录音(安卓10以上) 通过日志分析,发现当另一个应用打开录音的时候会被静音,日志如下: APM_AudioPolicyManager: setAppState(portId:43, state:2) APM_AudioPolicyManager: set…...

【VLA】Vision Language Action

文章目录一、什么是世界模型(World Model)?✅ 定义:🌍 核心功能:🔧 技术原理(典型架构):二、世界模型在具身智能中的作用三、VLA(Vision-Language…...

PyQt6开发可视化界面中遇到问题及解决方案集合

PyQt6开发可视化界面中遇到问题及解决方案集合 安装与配置: 1.配环境の拷打 因为博主这个项目本来是在pycharm中的本地python3.12.7环境下开发的,涉及mineru解析,vectordatabase、fuseki、neo4j入库等核心模块,开发桌面软件时遇…...

DeepSeekubernetes-1.35.3/kubernetes-1.35.3/test/utils/ktesting/examples/logging/example_test.go 源码分析

我来分析 Kubernetes 测试工具 ktesting 中的日志示例文件 example_test.go。这个文件展示了如何在 Kubernetes 测试中使用结构化日志。 文件概述 这是 Kubernetes v1.35.3 中 test/utils/ktesting 包的示例文件,展示了如何使用 ktesting 框架进行带有结构化日志的测…...

委托的全面知识总结(C#)

一.定义与本质委托是干什么的?委托就是用来存 方法 的容器你可以把一个方法当成 数据 一样传递1.什么是委托委托是C#中类型安全的函数指针,它是一种“类型”,可以存储,调用,传递一个或多个方法的引用2.核心本质委…...

如何3步轻松备份微博内容:Speechless免费PDF导出完整指南

如何3步轻松备份微博内容:Speechless免费PDF导出完整指南 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在信息快速更迭的数字时代&…...

PPTist:重构演示文稿创作流程的3大颠覆性突破

PPTist:重构演示文稿创作流程的3大颠覆性突破 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the ed…...

FALCON: Fast Autonomous Aerial ExplorationUsing Coverage Path Guidance(覆盖路径引导的快速自主空中探索)

创新点:提出一种基于连接性的增量式空间分解和连接图构造方法,捕获环境拓扑并促进有效的探测覆盖路径规划提出一种分层的探索规划方法,生成合理的覆盖路径作为全局指导,并优化局部边界访问顺序,保持覆盖路径的意图。提…...

抢答器软件哪家强?五款抢答器软件全方位深度评测

在知识竞赛、企业培训、团队建设等活动中,一套高效、公平、稳定的抢答器软件是活动成功的关键。面对市场上琳琅满目的产品,如何选择成为许多组织者的难题。本文将从实际应用出发,对五款主流的抢答器软件进行深度评测,涵盖功能、性…...

驱动模块的加载与卸载机制

昨天调板子又遇到个怪事:insmod加载驱动一切正常,但rmmod死活卸载不掉,内核日志里只留下一行“Device or resource busy”。查了半小时才发现,原来是有个用户态进程没关,一直占着驱动文件。这种问题在嵌入式开发里太常…...