Я не знаю python, но вот решение на основе, например, нескольких предположений. Допустим, следующее hashed_ids
извлечено:
hashed_ids = ["id1","id1","id1","id2"]
Чтобы использовать его в запросе терминов, мы можем получить только уникальный список идентификаторов, т.е.
hashed_ids_unique = ["id1", "id2"]
Предположим, что do c (s) проиндексированы со структурой ниже:
PUT test/_doc/1
{
"id": "id1",
"weight":9
}
Теперь мы можем использовать обновление по запросу, как показано ниже:
POST test/_update_by_query
{
"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"]
}
}
}
Пояснение к скрипту:
Следующее дает количество совпадающих идентификаторов в списке hashed_ids
для id
текущего совпадающего do c.
long weightToAdd = params.hashed_ids.stream().filter(idFromList -> ctx._source.id.equals(idFromList)).count();
Следующее добавляет weightToAdd
к существующему значению weight
в документе.
ctx._source.weight += weightToAdd;