Elasticsearch使用
es数据的基础功能使用为了配合7.1.1版本es使用一、客户端配置ElasticsearchConfig使用 Spring Data ES 的RestClients创建RestHighLevelClientConfigurationpublic class ElasticsearchConfig extends AbstractElasticsearchConfiguration {Beanpublic RestHighLevelClient elasticsearchClient() {return RestClients.create(ClientConfiguration.builder().connectedTo(uris) // host:port.withConnectTimeout(Duration.ofSeconds(connectTimeout)).withSocketTimeout(Duration.ofSeconds(socketTimeout)).withBasicAuth(username, password).build()).rest();}}二、构建查询SearchRequest/** 构建索引查询请求 */SearchRequest searchRequest new SearchRequest(searchFieldVo.getIndexName());/**用来构建搜索请求体的核心工具类‌它帮你把查询条件、分页、排序等参数组装 */SearchSourceBuilderSearchSourceBuilder searchSourceBuilder new SearchSourceBuilder();‌创建实例‌SearchSourceBuilder sourceBuilder new SearchSourceBuilder();‌设置查询条件‌用sourceBuilder.query(QueryBuilders.matchQuery(字段, 值))或sourceBuilder.query(QueryBuilders.matchAllQuery())来指定查什么。‌分页控制‌sourceBuilder.from(起始位置)和sourceBuilder.size(每页条数)from默认0size默认10。‌排序‌sourceBuilder.sort(字段名, SortOrder.ASC)可添加多个sort实现多级排序。‌返回字段筛选‌sourceBuilder.fetchSource(new String{字段1, 字段2}, null)只返回指定字段。‌‌‌BoolQueryBuilder/** 用于构建复杂布尔逻辑查询的核心类通过组合must、should、must_not、filter子句实现多条件精准检索 */BoolQueryBuilder boolQuery QueryBuilders.boolQuery();核心机制与子句语义‌must‌逻辑“与”AND所有子句必须匹配‌参与相关性评分‌。‌should‌逻辑“或”OR倾向默认非强制若与must共存则提升得分若单独使用需配合minimumShouldMatch生效‌参与评分‌。‌must_not‌逻辑“非”NOT匹配该条件的文档被排除‌不参与评分‌。‌filter‌逻辑“与”AND强制过滤且‌零评分开销‌支持缓存适用于精确匹配或范围过滤 。‌‌功能支持 nested 嵌套数组字段查询如 JSON 数组内的字段支持 term 精确匹配、fuzzy 模糊匹配、exists 存在、range 区间使用 from/size 分页适用于前 10000 条支持的查询条件boolQuery├── must: nestedQuery(queryField → secField secFieldValue) ← 嵌套字段匹配├── must: termQuery(queryMapVoList[] 每个元素) ← 多字段精确 AND├── must: fuzzyQuery(fuzzyField, fuzzyFieldValue) ← 模糊匹配├── must: existsQuery(existField) ← 存在判断├── must: rangeQuery(rangeField, filedValueStart, filedValueEnd) ← 区间└── from/size 分页 sortField 排序三、案例例searchFieldVo为请求参数用不同字段来组建复杂的查询条件/** 设置区间查询 */ if (!StringUtils.isEmpty(searchFieldVo.getRangeField())) { boolQuery.must(addRangeQuery(searchFieldVo)); }addRangeQuery方法RangeQueryBuilder rangeQuery QueryBuilders.rangeQuery(rangeField); if (valueStart ! null) rangeQuery.gte(valueStart); if (valueEnd ! null) rangeQuery.lte(valueEnd);/** 集合内字段查询[{A:B},{A:C}]比如查询集合内A的值 */ if (!StringUtils.isEmpty(searchFieldVo.getQueryField())) { NestedQueryBuilder nestedQuery QueryBuilders.nestedQuery( searchFieldVo.getQueryField(), QueryBuilders.matchQuery(searchFieldVo.getSecField(), searchFieldVo.getSecFieldValue()), ScoreMode.None ); boolQuery.must(nestedQuery); }/** 不存在某值(not in) */if (StrUtil.isNotBlank(searchFieldVo.getNotField()) searchFieldVo.getNotValues() ! null) { boolQuery.mustNot(QueryBuilders.termsQuery(searchFieldVo.getNotField(), searchFieldVo.getNotValues())); } if (CollectionUtil.isNotEmpty(searchFieldVo.getQueryMapVoList())) { for (QueryMapVo queryMapVo : searchFieldVo.getQueryMapVoList()) { if (queryMapVo.getField() ! null) { boolQuery.must(QueryBuilders.termQuery(queryMapVo.getField(),queryMapVo.getFiledValue())); } } }/** 存在某值(in) */if (StrUtil.isNotBlank(searchFieldVo.getShouldField()) searchFieldVo.getShouldValues() ! null) { boolQuery.should(QueryBuilders.termsQuery(searchFieldVo.getShouldField(), searchFieldVo.getShouldValues())); boolQuery.minimumShouldMatch(1); }/** 将查询层层设置到searchRequest中 */searchSourceBuilder.query(boolQuery); searchRequest.source(searchSourceBuilder);/** 用客户端执行查询 */ SearchResponse searchResponse client.search(searchRequest, RequestOptions.DEFAULT);四、其他新建索引/** * 新建索引 * param index * param id * param jsonSource * return */ public boolean indexDocument(String index, String id, String jsonSource) { boolean ackFlag false; IndexRequest request new IndexRequest(index) .id(id) .source(jsonSource, XContentType.JSON); try { IndexResponse response client.index(request, RequestOptions.DEFAULT); ackFlag response.status() RestStatus.CREATED || response.status() RestStatus.OK; } catch (IOException e) { e.printStackTrace(); } return ackFlag; }删除索引/** * 删除索引 */ public boolean deleteIndex(String indexName) throws IOException { if (!indexExists(indexName)) { return false; } DeleteIndexRequest request new DeleteIndexRequest(indexName); AcknowledgedResponse response client.indices().delete(request, RequestOptions.DEFAULT); return response.isAcknowledged(); }添加文档/** * 添加文档使用默认_doc类型 */ public boolean addDocumentJson(String indexName, String id, String document) throws IOException { IndexRequest request new IndexRequest(indexName); request.id(id); request.source(document, XContentType.JSON); client.index(request, RequestOptions.DEFAULT); return true; }删除文档/** * 删除文档 */ public boolean deleteDocument(String indexName, String id) throws IOException { DeleteRequest request new DeleteRequest(indexName, id); client.delete(request, RequestOptions.DEFAULT); return true; }更新文档/** * 更新文档 */ public boolean updateDocument(String index, String id, String jsonSource) { boolean ackFLag false; UpdateRequest request new UpdateRequest(index, id) .doc(jsonSource, XContentType.JSON); try { UpdateResponse response client.update(request, RequestOptions.DEFAULT); ackFLag response.status() RestStatus.CREATED || response.status() RestStatus.OK; } catch (IOException e) { e.printStackTrace(); } return ackFLag; }根据id获取文档/** * 根据ID获取文档 */ public MapString, Object getDocumentById(String indexName, String id) throws IOException { GetRequest request new GetRequest(indexName, id); GetResponse response client.get(request, RequestOptions.DEFAULT); if (response.isExists()) { return response.getSourceAsMap(); } return null; }解析搜索结果/** * 解析搜索结果 * param response 响应信息 * return 查询数据 */ private ListMapString, Object parseSearchResponse(SearchResponse response) { ListMapString, Object resultList new ArrayList(); log.info(查询到的数据总数量{}, response.getHits().getTotalHits()); for (SearchHit hit : response.getHits().getHits()) { resultList.add(hit.getSourceAsMap()); } return resultList; }

相关新闻

PaddleOCR版面分析数据集制作与优化实战

PaddleOCR版面分析数据集制作与优化实战

1. 项目概述版面区域检测是文档智能分析领域的关键技术,它能自动识别文档图像中的不同内容区域(如标题、段落、表格、图片等)并标注其位置和类别。PaddleOCR作为业界领先的OCR工具库,其版面分析模块在各类文档处理场景中展现出强大…

2026/7/24 4:07:15 阅读更多 →
为什么高性价比排污泵公司信息梳理?多家维度拆解

为什么高性价比排污泵公司信息梳理?多家维度拆解

工业泵类采购领域,对“高性价比”的关注正在升温近一两年,工业泵类产品的采购需求正在发生一些静悄悄的调整。这种调整在排污泵领域体现得较为明显。过去,很多市政工程公司、污水处理厂和建筑单位的采购决策,往往以设计院指定的品…

2026/7/24 4:07:15 阅读更多 →
OmniTalker:阿里开源唇形同步技术解析与实践

OmniTalker:阿里开源唇形同步技术解析与实践

1. 项目概述:OmniTalker如何解决唇形同步难题第一次看到静态图片突然开口说话时,那种违和感简直让人头皮发麻——嘴唇机械地开合,声音却像后期配音般错位。这种"对口型"尴尬在虚拟主播、在线教育课件甚至视频会议特效中屡见不鲜。阿…

2026/7/24 4:07:15 阅读更多 →

最新新闻

为什么深圳越来越多品牌选择“动态商标”?AI正在重新定义视觉识别

为什么深圳越来越多品牌选择“动态商标”?AI正在重新定义视觉识别

如果你最近关注过深圳的品牌动态,可能会发现一个有趣的变化:越来越多的企业不再满足于一个“一成不变”的商标。大疆的螺旋桨会随视频节奏加速旋转,腾讯的企鹅在元宇宙中化为跳动的数字粒子,OPPO的“微笑商标”在不同场景下呈现从…

2026/7/24 4:13:17 阅读更多 →
Android 7.0+ HTTPS抓包终极方案:将Fiddler证书集成到系统分区

Android 7.0+ HTTPS抓包终极方案:将Fiddler证书集成到系统分区

1. 项目概述与核心挑战在移动应用开发、安全测试或者逆向分析的过程中,抓取和分析HTTPS流量是一项基础且关键的工作。Fiddler作为一款经典的HTTP/HTTPS调试代理工具,在Windows平台上几乎是开发者的标配。然而,当我们将目光投向Android设备&am…

2026/7/24 4:13:17 阅读更多 →
Python多模态大模型在金融预测中的应用实践

Python多模态大模型在金融预测中的应用实践

1. 项目背景与核心价值这个毕业设计项目将Python编程与多模态大模型技术相结合,构建了一个面向金融市场的智能预测系统。我在实际开发中发现,传统量化交易模型往往只依赖结构化数据,而忽略了新闻、社交媒体、财报文本等非结构化数据蕴含的丰富…

2026/7/24 4:13:17 阅读更多 →
大模型Agent评估:挑战、框架与最佳实践

大模型Agent评估:挑战、框架与最佳实践

1. 为什么大模型开发者必须重视Agent评估?三年前我刚接触大模型开发时,曾在一个客户项目中遭遇惨痛教训。当时我们团队开发的客服Agent在测试阶段表现优异,能流畅处理90%的常见问题。但上线第一天就闹出笑话——当用户询问"如何重置密码…

2026/7/24 4:13:16 阅读更多 →
AI Agent系统设计:从点餐系统看多任务协同架构

AI Agent系统设计:从点餐系统看多任务协同架构

1. 项目背景与核心价值最近在准备AI方向的面试时,我发现很多公司都在考察Agent系统的设计能力。特别是那种需要处理多任务协同的场景,比如电商领域的下单-支付-售后全流程。这让我想起去年做过的一个点餐系统Agent项目,正好可以拿来深入剖析。…

2026/7/24 4:13:16 阅读更多 →
AI生成内容优化实战:提升简历与作品集通过率

AI生成内容优化实战:提升简历与作品集通过率

1. 项目背景与核心挑战2026届毕业生正面临一个前所未有的就业环境——AIGC工具的普及让简历、作品集甚至笔试答案都出现了高度同质化现象。最近某招聘平台数据显示,95%的应届生材料存在明显AI生成痕迹,这反而成为新的筛选门槛。作为经历过校招季的过来人…

2026/7/24 4:12:16 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻