本文已收录至 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

这样做有两个主要好处:

  1. 它可以提升 Elasticsearch 的性能,因为少量的数据意味着更快的序列化和反序列化。
  2. 它可帮助你聚焦于感兴趣的部分,不必处理无关的数据。

请注意,* 是通配符,代表任何值。

以下是一些其他 filter_path 的示例:

  1. filter_path=took: 这个请求仅返回执行请求所花费的时间(以毫秒为单位)。
  2. filter_path=items._id,items._index: 这个请求仅返回每个 item 的 _id_index 字段。
  3. filter_path=items.*.error: 这个请求会返回所有包含 error 字段的 items。
  4. filter_path=hits.hits._source: 这个请求仅返回搜索结果中的原始文档内容。
  5. filter_path=_shards, hits.total: 这个请求返回关于 shards 的信息和命中的总数。
  6. filter_path=aggregations.*.value: 这个请求仅返回每个聚合的值。

请注意,如果你在 filter_path 中指定了多个字段,你需要使用逗号将它们分隔开。


本篇文章就到这里,感谢阅读,如果本篇博客有任何错误和建议,欢迎给我留言指正。

有收获?希望老铁来个三连,给更多的同学看到这篇文章,顺便激励下我,嘻嘻。

老铁们,关注我的微信公众号「Java 随想录」,专注分享技术,文章持续更新,可以关注公众号第一时间阅读。

一个人走的很快,一群人走的更远。关注我,我们一起学习成长!

学好Elasticsearch系列-索引的批量操作的更多相关文章

  1. elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))

    一.分词器 1. 认识分词器  1.1 Analyzer   分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如 ...

  2. Elasticsearch系列---生产集群的索引管理

    概要 索引是我们使用Elasticsearch里最频繁的部分日常的操作都与索引有关,本篇从运维人员的视角,来玩一玩Elasticsearch的索引操作. 基本操作 在运维童鞋的视角里,索引的日常操作除 ...

  3. WEB架构师成长系列索引

    WEB架构师成长系列索引 http://www.cnblogs.com/seesea125/archive/2012/04/17/2453256.html

  4. WPF 基础到企业应用系列索引

    转自:http://www.cnblogs.com/zenghongliang/archive/2010/07/09/1774141.html WPF 基础到企业应用系列索引 WPF 基础到企业应用系 ...

  5. 【转】WF4.0实战系列索引

    转自:http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html 此系列的工作流文件案例比较多点,实用性好. W ...

  6. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  7. Azure IoT Hub和Event Hub相关的技术系列-索引篇

    Azure IoT Hub和Event Hub相关的技术系列,最近已经整理了不少了,统一做一个索引链接,置顶. Azure IoT 技术研究系列1-入门篇 Azure IoT 技术研究系列2-设备注册 ...

  8. ES 10 - Elasticsearch的索引别名和索引模板

    目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...

  9. elasticsearch的索引操作和文档操作总结

    参考文档:https://es.xiaoleilu.com/010_Intro/00_README.html 一.索引操作 1.查看当前节点的所有的index 查看当前节点的所有的index [roo ...

  10. elasticsearch的索引自动清理及自定义清理

    近发现elasticsearch近期索引文件大的吓人,清理了下之前的索引文件,发现服务器性能大大的减轻了一半,想一直保留近一个月的索引文件,但是又不想每个月手动清楚,在此写了一个小脚本 查询索引: c ...

随机推荐

  1. 2020-10-25:go中channel的close流程是什么?

    福哥答案2020-10-25:

  2. python 之路,Django rest framework 初探

    摘自 金角大王  https://www.cnblogs.com/alex3714/articles/7131523.html Django rest framework介绍 Django REST ...

  3. Can't uninstall 'Pillow'. No files were found to uninstall.

    Can't uninstall 'Pillow'. No files were found to uninstall. Pillow卸载不掉的解决办法 1.进入python所在路径,进入scripts ...

  4. 百度云原生数据库GaiaDB的HTAP与多地多活技术实践

    摘要:云原生数据库在使用存算分离技术后,可以在完全兼容MYSQL协议和语法的情况下,极大提升单实例所能承载的数据规模与吞吐能力上限.但除了对客户端兼容外,对整个数据生态(地域容灾,数据分析,备份恢复) ...

  5. ArcMap手动新建矢量要素的方式

      本文介绍在ArcGIS下属ArcMap软件中,新建点.线.面等矢量要素图层,并对新建图层的空间范围加以划定的方法.   首先,在右侧"Catalog"栏中选择需要存放新建立矢量 ...

  6. python---序列化小结

    python 序列化 1 什么叫序列化 在我们存储数据或网络传输数据时候,需要多我们对象进行处理,把对象处理成方便储存和网络传输的数据格式,这个过程叫做序列化 2 对象序列化有三种方式; 2.1 pi ...

  7. 安全测试实践-万家APP越权逻辑漏洞挖掘

    逻辑漏洞会导致业务面临着巨大的经济损失隐患与敏感数据泄露的风险,本文从安全测试的角度,以越权逻辑漏洞为例,介绍逻辑漏洞的挖掘方法和实践过程. 一.什么是越权逻辑漏洞 定义: 指由于系统的权限控制逻辑不 ...

  8. 【AGC】云监控日志服务查询不到Logger日志相关问题2

    ​[关键字] AGC.云监控.日志服务 [问题描述] 之前有开发者反馈在使用AGC云监控,填写了Logger日志,但是在云监控的日志服务查不到的问题.具体如下所述: 云函数按要求写了Logger日志, ...

  9. JetBrain学信网注册(Clion)

    一.打开网站 首先打开JetBrains关于学生认证的网站:https://www.jetbrains.com/shop/eform/students,可以看见以下页面: 二.人工验证 人工验证适合于 ...

  10. 前端Vue自定义顶部搜索框 热门搜索 历史搜索 用于搜索跳转使用

    前端Vue自定义顶部搜索框 热门搜索 历史搜索 用于搜索跳转使用, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13128 效 ...