【发布时间】:2020-06-22 11:17:58
【问题描述】:
我需要更新 Elasticsearch 中文档的字段,并将该文档的计数添加到 python 代码内的列表中。 weight 字段包含数据集中文档的计数。数据集需要不时更新。因此每个文档的计数也必须更新。 hashed_ids 是新一批数据中的文档 ID 列表。匹配 id 的 weight 必须增加 hashed_ids 中该 id 的计数。
我尝试了下面的代码,但它不起作用。
hashed_ids = [hashlib.md5(doc.encode('utf-8')).hexdigest() for doc in shingles]
update_with_query_body = {
"script": {
"source": "ctx._source.content_completion.weight +=param.count",
"lang": "painless",
"param": {
"count": hashed_ids.count("ctx.['_id']")
}
},
"query": {
"ids": {
"values": hashed_ids
}
}
}
例如,假设一个带有id=d1b145716ce1b04ea53d1ede9875e05a 和weight=5 的文档已经存在于索引中。并且字符串d1b145716ce1b04ea53d1ede9875e05a 在hashed_ids 中重复了三次,因此上面显示的update_with_query 查询将匹配数据库中的文档。我需要将 3 加到 5 并有 8 作为最终 weight
【问题讨论】:
-
你能详细解释一下你想做什么吗?
-
@gaurav9620 我用更多解释更新了问题
-
您想更新文档中的字段并将计数添加到python代码中的数据结构中。不是吗?如果是这样,您可以添加一个示例吗?
-
@Gibbs 我补充了一些解释
-
所以,
hashed_ids是一个array 类型,如果它与它自己的id匹配,那么您需要更新同一文档的weight。所以这三个都与相同的文档字段相关。我理解正确吗?
标签: python elasticsearch elasticsearch-query update-by-query