使用python批量更新优化Elasticsearch更新脚本体

2024-05-23 13:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑这个脚本:

hashed_ids = [hashlib.md5(doc.encode('utf-8')).hexdigest() for doc in shingles]
update_by_query_body =
{
  "query":{
    "terms": {
      "id":["id1","id2"]
    }
  },
  "script":{
    "source":"long weightToAdd = params.hashed_ids.stream().filter(idFromList -> ctx._source.id.equals(idFromList)).count(); ctx._source.weight += weightToAdd;",
    "params":{
      "hashed_ids":["id1","id1","id1","id2"]
    }
  }
}

这个脚本执行它应该执行的操作,但是它非常慢,并且有时会引发超时错误

它应该做什么

我需要在Elasticsearch中更新一个文档字段,并在python代码中的列表中添加该文档的计数。权重字段包含数据集中文档的计数。数据集需要不时更新。因此,每个文档的计数也必须更新hashed_ids是新批数据中的文档ID列表。匹配id的权重必须增加hashed_ids中该id的计数。 例如,假设索引中已经存在带有id=d1b145716ce1b04ea53d1ede9875e05aweight=5的文档。而且字符串d1b145716ce1b04ea53d1ede9875e05ahashed_ids中重复三次,因此update_with_query查询将匹配数据库中的文档。我需要将3添加到5,并将8作为最终weight


我需要一些想法来提高代码的效率


Tags: 数据文档脚本ididssourcedocupdate