当前位置: 首页 > 面试题库 >

更新嵌套字段以获取数百万个文档

袁鸿畅
2023-03-14
问题内容

我对脚本使用批量更新以更新html" target="_blank">嵌套字段,但这非常慢:

POST index/type/_bulk

{"update":{"_id":"1"}}
{"script"{"inline":"ctx._source.nestedfield.add(params.nestedfield)","params":{"nestedfield":{"field1":"1","field2":"2"}}}}
{"update":{"_id":"2"}}
{"script"{"inline":"ctx._source.nestedfield.add(params.nestedfield)","params":{"nestedfield":{"field1":"3","field2":"4"}}}}

 ... [a lot more splitted in several batches]

您知道另一种可能更快的方法吗?

为了不对每次更新重复执行脚本,似乎可以存储该脚本,但是我找不到保持“动态”参数的方法。


问题答案:

与性能优化问题一样,由于有许多可能导致性能不佳的原因,因此没有唯一的答案。

在您的情况下,您正在批量update请求。当update执行,该文件实际上是被重新索引:

…要更新文档就是要对其进行检索,更改,然后为整个文档重新编制索引。

因此,有必要看一下索引性能调整技巧。在您的情况下,我会考虑的头几件事是选择正确的批量大小,使用多个线程进行批量请求并增加/禁用索引刷新间隔。

您可能还会考虑使用支持并行批量请求的现成客户端,例如Python elasticsearch客户端。

监视ElasticSearch性能指标以了解瓶颈在哪里,以及您的性能调整是否能带来实际收益,将是理想的选择。这是有关ElasticSearch性能指标的概述博客文章。



 类似资料:
  • 问题内容: 我只想获取嵌套字段,但不能,因为它不是叶字段。 我在下面尝试过,但是无法匹配嵌套对象中的每个ID和名称。 结果: 这是我的预期结果: 问题答案: 如果您没有某个查询应以某种方式匹配嵌套字段,则可以这样进行: 如果您还有一个查询,并且想返回 匹配 的 嵌套文档,则 可以这样操作(使用):

  • 我想在我的MongoDB数据库中找到一个嵌套集合,并从Pymongo更新它。下面是我的文档树的结构: 我希望访问的集合是。目前,我的代码使用函数来定位中的元素,键为“Joe Edwards”。我得到的回报是一个光标对象;这是意料之中的。但是,我找不到访问集合并更新它的方法(我正在寻找类似这样我就可以直接操作)。 我已经查看了PyMongo文档和堆栈交换上的许多帖子,但我没有发现任何类似的内容。我的

  • 问题内容: 我想在每个更新时间将一个对象添加到字段中。 例如,我有一个文档: 下次,我想在测试字段中添加一个对象并保存旧对象。结果是: 如何实现? 编辑 我使用脚本: 但是,我得到了例外: 编辑 现在,我想添加一个字段以确保更新或插入对象。例如: 当我更新字段时,当id存在时,我将更新对象。相反,我将插入对象。 问题答案: 我建议尝试这样的脚本,该脚本在参数中带有两个参数。它将检查任何嵌套对象是否

  • 这是我在mongo的文档: 我需要更新内部房间阵列中的对象。我尝试了一个选择匹配元素的查询没有语法错误,但出现了一个错误: “errmsg”:“字段“calendar.0.rooms.0.price”必须是数组,但在文档{u id:ObjectId('5cd26a886458720f7a66a3b8')中为字符串类型”, 这是我的疑问: 这是我在StackOverflow中找到的一些参考,但没有帮

  • 我想在具有指定 URL 的相应文档中将嵌套的“已爬行”更新为 True。 我对mongodb相当陌生,我似乎无法弄清楚这一点,非常感谢任何帮助。

  • 我是Elasticsearch的新手,我提出了一个问题,Elasticsearch嵌套查询是否只能为嵌套字段返回匹配的嵌套文档。 对于示例,我有一个名为的类型,其中嵌套字段名为 和嵌套查询 我需要的是搜索有提到足球的评论的博客文章,每个博客文章的评论数与足球相匹配(在例子中它数为1,因为另一个评论刚刚提到篮球)。 然而,Elasticsearch似乎总是返回完整的文档,所以我如何才能实现它,或者我