3

我使用脚本批量更新来更新嵌套字段,但这非常慢:

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]

你知道另一种更快的方法吗?

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

4

1 回答 1

3

与性能优化问题一样,没有单一的答案,因为性能不佳的可能原因有很多。

在您的情况下,您正在发出批量update请求。执行an 时update,文档实际上正在被重新索引

...更新文档是检索它,更改它,然后重新索引整个文档。

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

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

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

于 2017-10-21T08:07:41.913 回答