我使用脚本进行批量更新以更新嵌套字段,但这非常慢:
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]
你知道另一种可能更快的方法吗?
似乎可以存储脚本以便不为每次更新重复它,但我找不到保持“动态”参数的方法。
答案 0 :(得分:2)
与性能优化问题一样,没有单一的答案,因为有很多可能导致性能不佳的原因。
在您的情况下,您正在发出批量update
请求。执行update
时,文档为actually being re-indexed:
...更新文档是检索文档,更改它,然后重新索引整个文档。
因此,查看indexing performance tuning tips是有道理的。我要考虑的第一件事就是选择 正确的批量大小,使用多个线程进行批量请求并增加/禁用indexing refresh interval。
您也可以考虑使用支持并行批量请求的现成客户端,例如Python elasticsearch client。
监控ElasticSearch性能指标以了解瓶颈在哪里,以及您的性能调整是否给出实际收益是理想的。 Here是关于ElasticSearch性能指标的概述博客文章。