【Elasticsearch】-批量操作

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 在ES中,提供BULK API来批量操作文档,在单个请求调用中执行多个索引或删除文档、更新文档的操作。这减少了开销,可以大大提高索引速度。

参考文档

https://www.elastic.co/guide/en/elasticsearch/reference/7.11/docs-bulk.html#bulk-api-request-body


在单个API调用中执行多个索引或删除操作。减少网络请求开销,提高索引速度。

API请求方式如下图所示:

比如以下例子,一个请求中包含index、delete、create、update四个操作

Request body

请求正文包含创建,删除,索引和更新操作以及它们关联的源数据列表。

create 如果文档不存在,在es中索引指定的文档信息

_index:当API路径中的未指定时,此参数必填

_id: 文档的id,如果未指定es回自动生成一个ID

delete从索引中删除指定的文档

_index:当API路径中的未指定时,此参数必填

_id: 文档的id,此参数必须的

index索引指定的文档。如果文档存在,则替换文档并递增版本。第二行必须包含要索引的源数据。

_index:当API路径中的未指定时,此参数必填

_id: 文档的id,如果未指定es回自动生成一个ID

update执行部分文档更新。第二行必须包含部分文档和更新选项。

_index:当API路径中的未指定时,此参数必填

_id: 文档的id,此参数必须的

doc: 索引的部分文档。更新操作所需。

fileds:文档的字段

detect_noop:默认值为true,默认情况下只有原来的source和新的source存在不同的字段情况下才会重建索引,如果一模一样是不会触发重建索引的,如果将detect_noop=false不管内容有没有变化都会重建索引,这一点可以通过version的值的变化来查看是否重建索引。

使用retry_on_conflict参数可以指定当文档冲突时,尝试更新的次数

update操作支持部分文档更新,Upsert,doc_as_upsert,script,params(for脚本),lang(for脚本)和_source。

几种方式可参照以下例子

curl-XPOST-uundefined:$ESPASS"localhost:9200/_bulk?pretty"-H'Content-Type: application/json'-d'#部分文档更新{ "update" : {"_id" : "1", "_index" : "index1", "retry_on_conflict" : 3} }
{ "doc" : {"field" : "value"} }
#支持脚本 upsert{ "update" : { "_id" : "0", "_index" : "index1", "retry_on_conflict" : 3} }
{ "script" : { "source": "ctx._source.counter += params.param1", "lang" : "painless", "params" : {"param1" : 1}}, "upsert" : {"counter" : 1}}
#支撑doc_as_upsert 如果没有就创建,又就覆盖,source如果完全相同,默认不会执行任何操作{ "update" : {"_id" : "2", "_index" : "index1", "retry_on_conflict" : 3} }
{ "doc" : {"field" : "value"}, "doc_as_upsert" : true }
#返回值显示_source信息{ "update" : {"_id" : "3", "_index" : "index1", "_source" : true} }
{ "doc" : {"field" : "value"} }
#返回值显示_source信息{ "update" : {"_id" : "4", "_index" : "index1"} }
{ "doc" : {"field" : "value"}, "_source": true}


因为是单次请求,批量操作。多个操作中可能部分操作失败,当有操作失败时,返回信息如下所示:

其中errors=true代表有失败的操作,每个error代表失败操作的原因。

若仅需要返回有关失败操作的信息,可使用Filter_Path查询参数。

返回结果如下图所示

批量操作,文档数量的设置

整个批量请求都需要由接收到请求的节点加载到内存中,因此该请求越大,其他请求所能获得的内存就越少。 批量请求的大小有一个最佳值,大于这个值,性能将不再提升,甚至会下降。 但是最佳值不是一个固定的值。它完全取决于硬件、文档的大小和复杂度、索引和搜索的负载的整体情况。

幸运的是,很容易找到这个最佳点:通过批量索引典型文档,并不断增加批量大小进行尝试。 当性能开始下降,那么你的批量大小就太大了。一个好的办法是开始时将 1,000 到 5,000 个文档作为一个批次, 如果你的文档非常大,那么就减少批量的文档个数。

密切关注你的批量请求的物理大小往往非常有用,一千个 1KB 的文档是完全不同于一千个 1MB 文档所占的物理大小。 一个好的批量大小在开始处理后所占用的物理大小约为 5-15 MB。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
JSON API 数据格式
学好Elasticsearch系列-索引的批量操作
学好Elasticsearch系列-索引的批量操作
210 1
|
索引 Python
Python Elasticsearch批量操作客户端2
Python Elasticsearch批量操作客户端
112 0
|
JSON 测试技术 数据格式
Python Elasticsearch批量操作客户端 1
Python Elasticsearch批量操作客户端
102 0
|
运维 Java 程序员
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
本文介绍Elasticsearch Jest 批量操作bug 根因定位排查的方法。
1586 0
|
API
方法 | Elasticsearch Jest 批量操作bug 根因定位排查
1、背景 使用Jest进行批量插入数据的时候,偶尔会出现如下的bug One or more of the items in the Bulk request failed, check BulkResult.getItems() for more information. 起初认为是偶发,就把并发数调小,就再没有关注。
621 0
|
分布式计算 Hadoop 索引
|
17天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
1月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。