[特殊字符] Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南
🚀 Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南
一、HTTP API
定义与用途
Elasticsearch 的 HTTP API 是基于 RESTful 接口设计的核心交互方式,支持通过 URL 和 JSON 数据直接操作索引、文档、集群等资源。适用于快速调试、脚本调用和跨语言集成。
1. 索引管理
(1) 创建索引(指定分片与映射)
PUT /products
{"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"name": { "type": "text" },"price": { "type": "integer" }}}
}
- 用途:初始化数据结构,定义字段类型和分片策略。
- 参数说明:
number_of_shards:主分片数(不可修改)。mappings:字段类型(如text支持分词,keyword精确匹配)。
product:只是一个代表,是你要创建的索引的名称,索引可以理解为mysql中的一个表
settings:配置
properties:其内容就是你要写入到es的对象具体内容
(2) 删除索引
DELETE /products
- 风险提示:删除索引会清空所有数据,需谨慎操作。
2. 文档操作
(1) 新增文档(自动生成 ID)
POST /products/_doc
{"name": "iPhone 14","price": 6999
}
- 响应示例:返回自动生成的
_id(如_id: "x123")。
如上,请求体给出具体写到文档中的内容,文档可以理解为mysql中的一行数据记录
(2) 局部更新文档
POST /products/_update/x123
{"doc": { "price": 6499 }
}
- 优势:仅更新指定字段,减少网络传输和索引重建开销。
3. 查询与聚合
(1) 条件查询(分页与排序)
GET /products/_search
{"query": {"match": { "name": "iPhone" }},"from": 0,"size": 10,"sort": [ { "price": "desc" } ]
}
- 性能注意:深度分页(
from > 10000)需改用Search After或Scroll API。
from和size用于分页,from表示从第n个数据开始,size表示返回这个开始数据算起的m条文档数据
sort表示按照什么字段排序,升序还是降序
(2) 聚合统计(平均值)
GET /products/_search
{"aggs": {"avg_price": { "avg": { "field": "price" } }}
}
- 结果路径:
aggregations -> avg_price -> value。
4. 批量操作
(1) 批量写入/删除
POST /_bulk
{ "index": { "_index": "products", "_id": "1" } }
{ "name": "iPad", "price": 3999 }
{ "delete": { "_index": "products", "_id": "2" } }
- 性能建议:单次批量操作不超过 10MB,避免超时。
二、Java API
定义与用途
Java API 是 Elasticsearch 官方提供的高层客户端库(RestHighLevelClient),封装了 HTTP 请求的复杂性,支持强类型操作和异步处理。适用于后端服务开发。
1. RestHighLevelClient 常用方法
定义与用途
RestHighLevelClient 是 Java 客户端的入口类,通过调用其方法执行索引、文档、搜索等操作。需注意在 Elasticsearch 8.x 中已逐步迁移至新客户端 ElasticsearchClient,但旧版仍广泛使用。
(1) 索引管理方法
| 方法签名 | 用途 | 对应 Request 类 |
|---|---|---|
indices().create() | 创建索引 | CreateIndexRequest |
indices().delete() | 删除索引 | DeleteIndexRequest |
indices().exists() | 检查索引是否存在 | GetIndexRequest |
示例:创建索引
CreateIndexRequest request = new CreateIndexRequest("products").settings(Settings.builder().put("number_of_shards", 3)).mapping(Map.of("properties", Map.of("name", Map.of("type", "text"))));
client.indices().create(request, RequestOptions.DEFAULT);
(2) 文档操作方法
| 方法签名 | 用途 | 对应 Request 类 |
|---|---|---|
index() | 新增/全量替换文档 | IndexRequest |
update() | 局部更新文档 | UpdateRequest |
delete() | 删除文档 | DeleteRequest |
示例:局部更新文档
UpdateRequest request = new UpdateRequest("products", "x123").doc(Map.of("price", 6499));
client.update(request, RequestOptions.DEFAULT);
(3) 查询与聚合方法
| 方法签名 | 用途 | 对应 Request 类 |
|---|---|---|
search() | 执行搜索 | SearchRequest |
scroll() | 滚动查询大数据量 | SearchScrollRequest |
示例:条件查询
SearchSourceBuilder source = new SearchSourceBuilder().query(QueryBuilders.matchQuery("name", "iPhone")).size(10);
SearchRequest request = new SearchRequest("products").source(source);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
2. Request 与 Builder 常用方法
定义与用途
每个操作对应一个 Request 类,通过 Builder 模式链式设置参数(如查询条件、分页、聚合等)。新版客户端(8.x)推荐使用流式语法(Lambda 表达式),旧版通过 XxxRequestBuilder 类构建。
(1) SearchRequest 与 SearchSourceBuilder
用途:构建复杂查询(分页、排序、聚合)。
- Request 方法
indices(String... indices):指定搜索的索引。source(SearchSourceBuilder source):绑定查询条件、分页、排序等。
- Builder 方法
query(QueryBuilder query):设置查询条件(如matchQuery)。aggregation(AggregationBuilder aggregation):添加聚合逻辑(如avg)。from(int).size(int):分页控制
对于
QueryBuilders的详细介绍,看这篇文章
玩转Elasticsearch 查询利器!QueryBuilders 核心方法全解析-CSDN博客
核心方法:
SearchSourceBuilder source = new SearchSourceBuilder().query(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "iPhone")).filter(QueryBuilders.rangeQuery("price").gte(5000))).aggregation(AggregationBuilders.avg("avg_price").field("price")).from(0).size(10);
SearchRequest request = new SearchRequest("products").source(source);
(2) BulkRequest(批量操作)
用途:混合执行增删改操作。
- Request 方法
add(IndexRequest/UpdateRequest/DeleteRequest):混合添加增删改操作。
- Builder 方法
setRefreshPolicy(WriteRequest.RefreshPolicy):设置刷新策略(如IMMEDIATE实时生效)。
示例:
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest("products").id("1").source("name", "iPad"));
bulkRequest.add(new DeleteRequest("products").id("2"));
client.bulk(bulkRequest, RequestOptions.DEFAULT);
(3) UpdateByQueryRequest(按条件更新)
用途:批量更新符合查询条件的文档。
- Request 方法
setQuery(QueryBuilder query):筛选目标文档。setScript(Script script):定义更新逻辑。
示例:
UpdateByQueryRequest request = new UpdateByQueryRequest("products");
request.setQuery(QueryBuilders.termQuery("status", "pending"));
request.setScript(new Script("ctx._source.status = 'processed'"));
client.updateByQuery(request, RequestOptions.DEFAULT);
3. 整合示例:Request 与 Builder 协作
场景:构建复杂查询(分页 + 聚合 + 高亮)
// 1. 构建查询条件
SearchSourceBuilder source = new SearchSourceBuilder().query(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", "iPhone")).filter(QueryBuilders.rangeQuery("price").gte(5000))).aggregation(AggregationBuilders.avg("avg_price").field("price")).highlighter(new HighlightBuilder().field("name").preTags("<em>").postTags("</em>")).from(0).size(10);// 2. 创建 Request 对象
SearchRequest request = new SearchRequest("products").source(source).indices("products", "sales"); // 跨索引查询// 3. 执行查询
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
- 关键点:
SearchSourceBuilder负责组装查询逻辑。SearchRequest绑定查询条件并指定索引范围
三、最佳实践
-
性能优化
- 使用
BulkProcessor自动分批次提交文档。 - 设置
setRefreshPolicy(WriteRequest.RefreshPolicy.NONE)减少实时刷新开销。
- 使用
-
错误处理
try {client.index(request, RequestOptions.DEFAULT); } catch (ElasticsearchException e) {if (e.status() == RestStatus.CONFLICT) {// 处理版本冲突} } -
版本迁移
- Elasticsearch 8.x 推荐使用新客户端
ElasticsearchClient,语法更简洁:client.search(s -> s.index("products").query(q -> q.match(m -> m.field("name").query("iPhone"))) , Product.class);
- Elasticsearch 8.x 推荐使用新客户端
相关文章:
[特殊字符] Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南
🚀 Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南 一、HTTP API 定义与用途 Elasticsearch 的 HTTP API 是基于 RESTful 接口设计的核心交互方式,支持通过 URL 和 JSON 数据直接操作索引、文档、集群等资源。适用于快速调试、…...
网络和操作系统基础篇
网络和操作系统基础篇 TCP三次握手 客户端——发送带有SYN标志的数据包——服务端一次握手Client进入syn_sent状态;服务端——发送带有SYN/ACK标志的数据包——客户端二次握手服务端进入syn_rcvd;客户端——发送带有ACK标志的数据包——服务端三次握手…...
Oracle 连接报错:“ORA-12541:TNS:no listener ”,服务组件中找不到监听服务
一、 报错: navicat连接数据库报错:ORA-12541:TNS:no listener 二、排查问题 三、 解决问题 删除Oracle安装目录下选中的配置:listener.ora 及 listener*.bak相关的 cmd,用管理员打开 执行:netca 命…...
内外网文件传输 安全、可控、便捷的跨网数据传输方案
一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 安全性风险:内外网直连可能导致病毒传播、数据泄露。 操作繁琐:传统方式需频繁切换网络环境&…...
基于Flask的租房信息可视化系统的设计与实现
【Flask】基于Flask的租房信息可视化系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网的快速发展,租房市场日益繁荣,信息量急剧增加ÿ…...
《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
《Keras 2 :使用 RetinaNet 进行对象检测》 作者:Srihari Humbarwadi 创建日期:2020/05/17 最后修改日期:2023/07/10 描述:实施 RetinaNet:用于密集对象检测的焦点损失。 (i) 此示例使用 Keras 2 在 Colab 中查看 • 介绍 目标检测是计算机中非常重要的问题 视觉。在…...
【Erdas实验教程】010:监督分类及后处理、精度评价
文章目录 一、监督分类介绍二、监督分类流程1. 定义分类模板2. 评价分类模板3. 执行监督分类4. 评价分类结果4.1 叠加显示4.2 动态窗口链接4.3 阈值处理4.4 分类精度评价5. 分类后处理5.1 集聚处理5.2 滤网分析5.3 去除分析5.4 重编码一、监督分类介绍 遥感图像计算机分类的依…...
Moonshot AI 新突破:MoBA 为大语言模型长文本处理提效论文速读
前言 在自然语言处理领域,随着大语言模型(LLMs)不断拓展其阅读、理解和生成文本的能力,如何高效处理长文本成为一项关键挑战。近日,Moonshot AI Research 联合清华大学、浙江大学的研究人员提出了一种创新方法 —— 混…...
【Python量化金融实战】-第1章:Python量化金融概述:1.2 Python在量化金融中的优势与生态
本小节学习建议:Python在量化金融领域的统治地位不仅体现在当前的技术栈中,更在于其持续进化的能力。随着AI、区块链等新技术的融合,Python开发者将始终处于金融创新的最前沿。建议学习者从构建完整的策略生产线开始,逐步深入高频…...
react路由总结
目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…...
edge浏览器将书签栏顶部显示
追求效果,感觉有点丑,但总归方便多了 操作路径:设置-外观-显示收藏夹栏-始终...
AIGC-Stable Diffusion模型介绍
Stable Diffusion模型介绍 Stable Diffusion模型介绍模型架构Stable Diffusion模型特点 模型原理扩散过程 代码示例 Stable Diffusion模型介绍 Stable Diffusion是一种基于深度学习的图像生成模型,特别适用于生成高质量的图像。它利用扩散模型(diffusio…...
【算法】游艇租贷
问题 ⻓江游艇俱乐部在⻓江上设置了 n 个游艇租聘站,游客可以在这些租聘站租 ⽤游艇,然后在下游的任何⼀个租聘站归还。游艇出租站 i 到 j 的租⾦为 r(i, j),1 ≤i< j≤n,设计⼀个算法,计算从出租站 i 到 j 所需的…...
科普:Docker run的相关事项
一、镜像名(含标签)太长 如,通过如下命令行: docker pull designthru2019/dify:56c6d1af0944dbdb5e0115cb623ff0e118a4ac62拉取的镜像名(及标签)太长,可以通过改名的方法变短。 在 Docker 中&…...
Ryu:轻量开源,开启 SDN 新程
1. Ryu 控制器概述 定位:轻量级、开源的SDN控制器,专为开发者和研究人员设计,基于Python实现。开发者:由日本NTT实验室主导开发,遵循Apache 2.0开源协议。核心理念:简化SDN应用开发,提供友好的…...
Python游戏编程之赛车游戏6-2
3.2 move()方法的定义 Player类的move()方法用于玩家控制汽车左右移动,当玩家点击键盘上的左右按键时,汽车会相应地进行左右移动。 move()方法的代码如图7所示。 图7 move()方法的代码 其中,第20行代码通过pygame.key.get_pressed()函数获…...
IDEA + 通义灵码AI程序员:快速构建DDD后端工程模板
作者:陈荣健 IDEA 通义灵码AI程序员:快速构建DDD后端工程模板 在软件开发过程中,一个清晰、可维护、可扩展的架构至关重要。领域驱动设计 (DDD) 是一种软件开发方法,它强调将软件模型与业务领域紧密结合,从而构建更…...
libwebsockets交叉编译全流程
libwebsocket中的webscoket加密功能需要依赖于Openssl库因此需要提前准备好openssl开源库。 交叉编译openssl 下面演示源码方式交叉编译OpenSSL为动态库。 创建个Websocket文件夹,把后续的成果物均放在这个文件中,文件夹中创建子文件夹OpenSSL和libWeb…...
蓝思科技赋能灵伴科技:AI眼镜产能与供应链双升级
2月22日,蓝思科技宣布与AI交互领军企业杭州灵伴科技(Rokid)达成深度战略合作,通过整机组装与全产业链整合,为2025年全球AI眼镜出货量爆发式增长(预计达400万-1200万台)提供核心支撑。 双方合作通…...
谷歌浏览器更新后导致的刷新数据无法显示
这几天突然出现的问题,就是我做了一个网站,一直用Google展示,前两天突然就是刷新会丢失数据,然后再刷新几次吧又有了,之前一直好好的,后端也做了一些配置添加了CrossOrigin注解,然而换了edge浏览…...
AI产品经理:不只是懂算法,更需AI思维,引爆智能未来!大模型产品经理成长路线
本文探讨了AI产品经理的核心特质,强调其不仅需掌握AI算法,更应具备AI思维。文章指出,AI产品设计以操作简单为标准,但背后是复杂的系统支持。同时,AI发展依赖于产业生态的共同推进,包括上游芯片提供算力、中…...
别再死记硬背波形图了!用LTspice仿真带你搞懂LLC谐振变换器的三种工作模式
用LTspice仿真破解LLC谐振变换器的三种工作模式 电源设计领域里,LLC谐振变换器因其高效率、低EMI特性成为业界宠儿,但它的三种工作模式却让不少工程师头疼。传统教材里密密麻麻的公式推导和静态波形图,总让人有种"看懂了却不会用"的…...
从“变化”到“幅值”:增量式Σ-Δ ADC如何重塑高精度测量
1. 增量式Σ-Δ ADC与传统Σ-Δ ADC的本质区别 我第一次接触增量式Σ-Δ ADC是在设计一款高精度电子秤的时候。当时遇到一个棘手的问题:传统ADC在测量微小重量变化时,读数总是飘忽不定。后来改用增量式方案,问题迎刃而解。这让我意识到&#…...
ROS机器人仿真避坑:Gazebo差速插件与robot_state_publisher的TF冲突解决(附.xacro配置)
ROS机器人仿真中的TF冲突:Gazebo差速插件与robot_state_publisher的协同优化 当你在Rviz中看到机器人模型不断抖动,终端窗口不断刷出TF_REPEATED_DATA警告时,这通常意味着你的系统中存在多个TF数据发布源。这种问题在ROS机器人仿真中尤为常见…...
C语言学习笔记 - 4.C概述 - C的特点
本笔记基于郝斌-C语言自学入门教程整理,配套参考教材谭浩强《C程序设计(第五版)》第1章1.3节,适配VSCode C/C开发环境,核心梳理C语言的核心优势与固有缺陷,帮助建立对C语言的完整认知。一、C语言的核心优点C语言的核心竞争力集中在…...
KMS_VL_ALL_AIO:Windows系统与Office套件的一站式智能激活解决方案
KMS_VL_ALL_AIO:Windows系统与Office套件的一站式智能激活解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在Windows系统管理与软件部署领域,激活问题始终是技术…...
# Deno从零搭建高性能 Web 服务:权限控制与模块化设计实战在现代Node
Deno 从零搭建高性能 Web 服务:权限控制与模块化设计实战 在现代 Node.js 生态中,Deno 正以全新的姿态重新定义后端开发边界。它摒弃了 npm 和 package.json 的依赖管理方式,内置 TypeScript 支持,并通过严格的运行时权限模型提升…...
别再纠结SysTick优先级了!聊聊FreeRTOS里那些‘不准’的时钟和软件定时器到底该怎么用
嵌入式实战:如何正确理解RTOS时钟精度与定时器设计哲学 在嵌入式开发领域,对实时操作系统(RTOS)时钟精度的追求常常成为开发者的一种执念。我们习惯性地认为"实时"就意味着"精确到微秒",这种完美主义倾向在实际项目中往往…...
TMSpeech:如何在Windows上实现完全离线的实时语音转文字
TMSpeech:如何在Windows上实现完全离线的实时语音转文字 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 你是否曾因会议记录手忙脚乱,或者在线课程笔记跟不上老师的语速?传统的语…...
2026届必备的AI辅助写作方案横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 这款基于自然语言处理以及深度学习技术的智能工具,是AI写作软件。它能够辅助用户…...
