学好Elasticsearch系列-索引的批量操作
本文已收录至 Github,推荐阅读 Java 随想录
微信公众号:Java 随想录
先看后赞,养成习惯。
点赞收藏,人生辉煌。
Elasticsearch 提供了_mget和_bulk API 来执行批量操作,它允许你在单个 HTTP 请求中进行多个索引获取/删除/更新/创建操作。这种方法比发送大量的单个请求更有效率。
基于 mget 的批量查询
mget(多文档获取)是 Elasticsearch 中提供的一个 API,用于一次性从同一个索引或者不同索引中检索多个文档。
例子一:
以下是一个 Elasticsearch 的mget
(多文档获取)操作示例。在这个示例中,我们将获取索引 test-index
中具有特定 ID 的多个文档。
GET /test-index/_mget
{
"ids": ["1", "2"]
}
在上述请求中,我们正在获取 ID 为 "1" 和 "2" 的文档。
例子二:
你也可以在不同的索引中获取文档,只需指定每个文档的 _index
和 _id
:
GET /_mget
{
"docs": [
{
"_index": "test-index",
"_id": "1"
},
{
"_index": "another-index",
"_id": "2"
}
]
}
在这个请求中,我们从 "test-index" 索引获取 ID 为 "1" 的文档,并从 "another-index" 索引获取 ID 为 "2" 的文档。
例子三:
在以下的 Elasticsearch mget
(多文档获取)例子中,我们将从两个不同的索引获取文档,并且只返回特定的字段:
GET /_mget
{
"docs": [
{
"_index": "test-index-1",
"_id": "1",
"_source": ["field1", "field2"]
},
{
"_index": "test-index-2",
"_id": "2",
"_source": "field3"
}
]
}
在这个请求中,我们从 "test-index-1" 索引获取 ID 为 "1" 的文档,并只返回 "field1" 和 "field2" 字段。同时,我们从 "test-index-2" 索引获取 ID 为 "2" 的文档,并只返回 "field3" 字段。
源过滤 (_source
) 可以用来限制返回的字段。你可以提供一个字段的列表,或者一个单独的字段。注意,如果你请求的字段不存在,它将不会出现在响应中。
基于 bulk 的批量增删改
bulk 基本格式如下:
POST /<index>/_bulk
{"action": {"metadata"}}
{"data"}
bulk api 对 json 的语法有严格的要求,除了 delete 外,每一个操作都要两个 json 串(metadata 和 business data),且每个 json 串内不能换行,非同一个 json 串必须换行,否则会报错。
bulk 操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志。
增加
POST /_bulk
{ "create" : { "_index" : "product2", "_id" : "2" } }
{ "field1" : "value1", "field2" : "value2" }
在这个请求中,我们创建了一个新的文档,其在 "product2" 索引中的 ID 为 "2",并且包含两个字段 "field1" 和 "field2"。
请注意,这个操作都由两行组成:第一行包含操作类型(在这个示例中为 "create")和元数据;第二行包含要创建或索引的实际文档数据。
删除
删除文档,ES 对文档的删除是懒删除机制,即标记删除(lazy delete 原理)。
POST /_bulk
{ "delete" : { "_index" : "test-index", "_id" : "1" } }
{ "delete" : { "_index" : "test-index", "_id" : "2" } }
在这个请求中,我们从 "test-index" 索引中删除了 ID 为 "1" 和 "2" 的两个文档。
注意,每个 delete
操作仅由一行组成,这一行包含操作类型(在这个示例中为 "delete")以及元数据。
修改
POST /_bulk
{ "update" : { "_index" : "test-index", "_id" : "1" } }
{ "doc" : { "field1" : "new_value1", "field2" : "new_value2" }}
{ "update" : { "_index" : "test-index", "_id" : "2" } }
{ "doc" : { "field1" : "new_value3", "field2" : "new_value4" }}
在这个请求中,我们在 "test-index" 索引中更新了两个文档:
- 我们更新了 ID 为 "1" 的文档,设置 "field1" 和 "field2" 字段的值为 "new_value1" 和 "new_value2"。
- 我们也更新了 ID 为 "2" 的文档,设置 "field1" 和 "field2" 字段的值为 "new_value3" 和 "new_value4"。
filter_path
在 Elasticsearch 中,filter_path
参数用于过滤返回的响应内容,可以用于减小 Elasticsearch 返回的数据量。当你指明一个或多个路径时,返回的 JSON 对象就只会包含这些路径下的键,它接收一个逗号分隔的列表,其中包含了你想要返回的 JSON 对象内的路径。这个参数支持通配符(*
)匹配和数组元素([]
)匹配。列如:
POST /_bulk?filter_path=items.*.error
上述请求中的 filter_path=items.*.error
会让 Elasticsearch 仅返回 _bulk
API 调用结果中的错误信息。items.*.error
这个路径表示,在返回的响应中,匹配到所有存在 error
字段的 items
。
这样做有两个主要好处:
- 它可以提升 Elasticsearch 的性能,因为少量的数据意味着更快的序列化和反序列化。
- 它可帮助你聚焦于感兴趣的部分,不必处理无关的数据。
请注意,*
是通配符,代表任何值。
以下是一些其他 filter_path
的示例:
filter_path=took
: 这个请求仅返回执行请求所花费的时间(以毫秒为单位)。filter_path=items._id,items._index
: 这个请求仅返回每个 item 的_id
和_index
字段。filter_path=items.*.error
: 这个请求会返回所有包含error
字段的 items。filter_path=hits.hits._source
: 这个请求仅返回搜索结果中的原始文档内容。filter_path=_shards, hits.total
: 这个请求返回关于shards
的信息和命中的总数。filter_path=aggregations.*.value
: 这个请求仅返回每个聚合的值。
请注意,如果你在 filter_path
中指定了多个字段,你需要使用逗号将它们分隔开。
本篇文章就到这里,感谢阅读,如果本篇博客有任何错误和建议,欢迎给我留言指正。
有收获?希望老铁来个三连,给更多的同学看到这篇文章,顺便激励下我,嘻嘻。
老铁们,关注我的微信公众号「Java 随想录」,专注分享技术,文章持续更新,可以关注公众号第一时间阅读。
一个人走的很快,一群人走的更远。关注我,我们一起学习成长!
学好Elasticsearch系列-索引的批量操作的更多相关文章
- elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一.分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...
- Elasticsearch系列---生产集群的索引管理
概要 索引是我们使用Elasticsearch里最频繁的部分日常的操作都与索引有关,本篇从运维人员的视角,来玩一玩Elasticsearch的索引操作. 基本操作 在运维童鞋的视角里,索引的日常操作除 ...
- WEB架构师成长系列索引
WEB架构师成长系列索引 http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html
- WPF 基础到企业应用系列索引
转自:http://www.cnblogs.com/zenghongliang/archive/2010/07/09/1774141.html WPF 基础到企业应用系列索引 WPF 基础到企业应用系 ...
- 【转】WF4.0实战系列索引
转自:http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html 此系列的工作流文件案例比较多点,实用性好. W ...
- ElasticSearch+Kibana 索引操作
ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...
- Azure IoT Hub和Event Hub相关的技术系列-索引篇
Azure IoT Hub和Event Hub相关的技术系列,最近已经整理了不少了,统一做一个索引链接,置顶. Azure IoT 技术研究系列1-入门篇 Azure IoT 技术研究系列2-设备注册 ...
- ES 10 - Elasticsearch的索引别名和索引模板
目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...
- elasticsearch的索引操作和文档操作总结
参考文档:https://es.xiaoleilu.com/010_Intro/00_README.html 一.索引操作 1.查看当前节点的所有的index 查看当前节点的所有的index [roo ...
- elasticsearch的索引自动清理及自定义清理
近发现elasticsearch近期索引文件大的吓人,清理了下之前的索引文件,发现服务器性能大大的减轻了一半,想一直保留近一个月的索引文件,但是又不想每个月手动清楚,在此写了一个小脚本 查询索引: c ...
随机推荐
- 2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A[0] = 0, B[0] = 1,表示0到1有双向道路 A[1] = 1, B[1]
2022-11-28:给定两个数组A和B,比如 A = { 0, 1, 1 } B = { 1, 2, 3 } A[0] = 0, B[0] = 1,表示0到1有双向道路 A[1] = 1, B[1] ...
- vue全家桶进阶之路28:项目仓库Gitee
Gitee(之前称为GitCafe)是一种基于web的Git仓库托管服务,在中国很受欢迎.它为开发人员提供了一个平台,可以托管他们的Git仓库,与其他开发人员协作,并管理他们的代码. https:// ...
- Spring Cloud开发实践(五): Consul - 服务注册的另一个选择
目录 Spring Cloud开发实践(一): 简介和根模块 Spring Cloud开发实践(二): Eureka服务和接口定义 Spring Cloud开发实践(三): 接口实现和下游调用 Spr ...
- 小程序使用wx.navigateTo无法跳转到加了tabBar的页面
随着小程序的不断更新,发现目前的小程序版本使用navigator无法跳转到加了tabBar的页面:后来使用redirectTo进行跳转也不行:在刚开始也是纠结了好久一直找不到解决办法.最后从官方文档中 ...
- 这可能是最全面的Java学习路线了
大家好,我是大彬~ 我本科学的不是计算机,大四开始自学Java,并且拿到了几个互联网中大厂的offer.在学习Java这方面还是比较有经验的,下面我来分享下我整理的Java自学路线. 在这里也提醒学弟 ...
- 学习原根 by OI-wiki
根据 OI-wiki 的讲解,加以自己的理解和简化.偏重于算法竞赛而不是数学竞赛. 前置知识: 费马小定理:\(a^{p-1} \equiv 1(\mod p)\),\(p\) 为质数. 欧拉定理:\ ...
- 一次 HPC 病毒感染与解决经历
周一的时候,有同事反馈说,HPC 的项目报告路径正在不断产生 *.exe 和 *.pif 文件,怀疑是不是被病毒感染! 收到信息,第一时间进去目录,的确发现该目录每个几秒钟就自动生成一个 *.exe ...
- 原来kafka也有事务啊,再也不担心消息不一致了
前言 现在假定这么一个业务场景,从kafka中的topic获取消息数据,经过一定加工处理后,发送到另外一个topic中,要求整个过程消息不能丢失,也不能重复发送,即实现端到端的Exactly-Once ...
- Python的Lambda函数: 一把极简编程的瑞士军刀
Python中的lambda函数,或者叫匿名函数,是一个极其强大的工具.它以简洁.优雅的语法提供了创建函数的快速方式.在本篇文章中,我们将全方位地深入研究lambda函数的用法和特点,通过理论和实例相 ...
- 曲线艺术编程 coding curves 第九章 旋轮曲线(ROULETTE CURVES)
第九章 旋轮曲线(ROULETTE CURVES) 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物 ...