问题标签 [elasticsearch-bulk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
4310 浏览

java - ElasticSearch 错误 ""Message":"请求大小超过 10485760 字节"

使用此方法在 ElasticSearch 中上传 50 mb 大小的巨大 JSON 字符串时 -

错误是

在有效发送 10k 批次的代码中放置一个计数器可能有效,但我不知道该怎么做。

有关如何处理此问题的任何建议?

0 投票
3 回答
1684 浏览

elasticsearch - elasticsearch批量索引和动作部分的冗余数据

当使用弹性搜索的批量 API 索引数据时,这里是站点文档中的示例 json

在“准备”要由批量 API 使用的数据时,我必须在第一行指定操作,在下一行我将提供数据。每行上的一些冗余部分可能看起来很明显并且非常无害,但是当我索引数万亿行时,它不会增加延迟吗?是否有更好的方法通过指定索引名称并在标题处仅键入一次来推送所有行?特别是当我可以使用自动生成的 id 时,我可以避免生成 TB 的数据只是为了一次又一次地为同一目的添加到每一行。

我相信我在这里遗漏了一些明显的东西,否则我相信弹性公司的那些人足够聪明,已经弄清楚了,如果他们这样做了,应该有一些原因。但是什么?

0 投票
1 回答
623 浏览

elasticsearch - 上传时elasticsearch批量插入异常

尝试批量插入 elasticsearch 时出现异常v6.6.0

之前还好。

这是异常消息:

如何配置数据限制?因为例外是说明data too large, than the limit

0 投票
0 回答
281 浏览

elasticsearch - Elasticsearch:UpdateByQuery API 响应返回错误状态

我在尝试更新弹性搜索中不存在的文档时遇到了 UpdateByQuery API 的问题

问题描述

  1. 我们为每一天创建一个索引,例如 test_index-2020.03.11、test_index-2020.03.12 ……我们维护 8 天(今天和上周的 7 天)索引。

  2. 当数据到达时(从 Kafka 主题中逐一或批量读取),如果数据已经存在给定 ID,我们需要更新(可能存在于 8 天索引中的任何一个中),如果不存在则保存(到当前日指数)。

解决方案,我目前正在尝试数据一一到达:

  • 使用带有内联脚本的 UpdateByQuery 来更新文档

  • 如果 BulkByScrollResponse 返回更新计数 0,则保存文档

问题:

即使 doc 仍然不存在,我也可以看到 BulkByScrollResponse 将更新的字段返回为非零(1、2、3、4 ...),如下所示

BulkIndexByScrollResponse[sliceId=null,updated=1,created=0,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s]

由于这无法触发文档保存请求。

如果需要通过单个请求使用其各自的内容更新大量文档(具有一组不同的文档 ID),如何处理?我可以使用 UpdateByQuery 实现吗?

注意:考虑到每小时要处理的数据量,我们需要避免多次命中 Elasticsearch。

文档 ID 的格式为 str1:str2:Used:Sat Mar 14 23:34:39 IST 2020

但是即使文档不存在,我仍然可以看到更新的计数为非零

关于我正在尝试的方法添加更多几点:-在我的情况下,每个请求总是只有一个文档必须更新,因为我正在尝试更新与给定 ID 匹配的文档 -我们已将分片和副本配置为"number_of_shards": 10, "number_of_replicas": 1 - 我们采用这种方法,因为我们不知道实际文档驻留在哪个索引中

如果最多有一个文档匹配,则响应的更新字段不应超过 1

以下是我作为响应的一部分得到的几个输出: BulkIndexByScrollResponse[sliceId=null,updated=9,created=0,deleted=0,batches=1,versionConflicts=1,noops=0,retries=0,throttledUntil= 0s] BulkIndexByScrollResponse[sliceId=null,updated=10,created=0,deleted=0,batches=1,versionConflicts=0,noops=0,retries=0,throttledUntil=0s]

0 投票
1 回答
46 浏览

python - Python 中 Elasticsearch 的高效批量加载选项

我正在尝试使用 Python 将大量数据摄取到 Elasticsearch 中。为此,我正在使用批量 API 帮助程序,并且我开发了一个看起来像这样的函数,

这是实际摄取发生的部分,

现在,我的每个文档都包含大量数据(我有几个字段是大字符串),我注意到这个摄取过程非常缓慢。我正在分块摄取数据,索引 10000 个文档需要一分钟多一点的时间。

有没有更有效的方法来做到这一点?我正在努力使这个过程更快。

0 投票
2 回答
33 浏览

elasticsearch - 使用python部分更新elasticsearch列表字段值

这个问题的目的是询问社区如何在不删除该字段的任何其他内容的情况下部分更新字段。

StackOverflow 中有很多使用 python、curl 等来部分更新 ElasticSearch _source字段的示例。 elasticsearch python 库配备了一个elasticsearch.helpers文件夹,其中包含函数 - parallel_bulkstreaming_bulkbulk,允许开发人员轻松更新文档。

如果用户在 pandas 数据框中有数据,则可以轻松地遍历行以创建生成器以在 elasticsearch 中更新/创建文档。Elasticsearch 文档是不可变的,因此,当发生更新时,elasticsearch 将传递的信息用于创建新文档,增加文档版本,同时更新需要更新的内容。如果文档有一个字段作为列表,如果更新请求有一个值,它将用该新值替换整个列表。(许多 SO QAs 涵盖了这一点)。我不想用新值替换该列表的值,而是将列表中的单个值更新为新值。

例如,在我的 _source 中,我有一个字段为 ['101 country drive', '35 park drive', '277 Thunderroad belway']。该字段具有三个值,但假设我们意识到此文档不正确,我们需要将“101 country drive”更新为“1001 country drive”。

我不想删除列表中的其他值,而是只想新值更新索引值。

我是否需要编写一个无痛的脚本来执行此操作,或者是否有其他方法可以执行此操作?

示例:想要更新文档来自 ---

请注意,仅针对第一个索引更新地址,但索引号不应成为更新 _source 中地址值的因素。

在弹性搜索中部分更新文档同时保持该字段中剩余值的完整性的最有效和最pythonic的方法是什么?