Я пытаюсь использовать UpdateByQuery для обновления свойства большого количества документов.Но так как каждый документ будет иметь разное значение, мне нужно выполнить ir один за другим.Я перебираю большое количество документов, и для каждого документа я называю эту функцию:
def update_references(self, query, script_source):
try:
ubq = UpdateByQuery(using=self.client, index=self.index).update_from_dict(query).script(source=script_source)
ubq.execute()
except Exception as err:
return False
return True
Вот некоторые примеры значений:
- query = {'query': {'match': {'_id': 'VpKI1msBNuDimFsyxxm4'}}}
- script_source = 'ctx._source.refs = [\' python \ ', \' java \ ']'
Проблема в том, что, когда я это делаю, я получаю сообщение об ошибке: «Слишком много динамических компиляций скриптов в пределах, макс .: [75 / 5m]; пожалуйста, используйте вместо этого индексированные или скрипты с параметрами; это ограничение может быть изменено[script.max_compilations_rate] setting ".
Если я изменю max_compilations_rate с помощью Kibana, это не даст никакого эффекта:
PUT _cluster/settings
{
"transient": {
"script.max_compilations_rate": "1500/1m"
}
}
В любом случае, было бы лучше использовать параметризованный скрипт.Я попытался:
def update_references (self, query, script_source, script_params):
try:
ubq = UpdateByQuery(using=self.client, index=self.index).update_from_dict(query).script(source=script_source, params=script_params)
ubq.execute()
except Exception as err:
return False
return True
Итак, на этот раз:
- script_source = 'ctx._source.refs = params.value '
- script_params = {' value ': [\' python \ ', \' java \ ']}
Но так как мне нужно обновитьзапрос и параметры каждый раз, мне нужно создать новый экземпляр UpdateByQuery для каждого документа в большой коллекции, и в результате та же ошибка.
Я также попытался просмотреть и обновить большую коллекцию с:
es.update(
index=kwargs["index"],
doc_type="paper",
id=paper["_id"],
body={"doc": {
"refs": paper["refs"] # e.g. [\\'python\\', \\'java\\']
}}
)
Но я получаю следующую ошибку: «Не удалось установить новое соединение: [Errno 99] Невозможно назначить запрошенный адрес juil. 10 18:07:14 bib gunicorn [20891]: POSThttp://localhost:9200/papers/paper/OZKI1msBNuDimFsy0SM9/_update [status: N / A request: 0.005s "
Так что, пожалуйста, если у вас есть идея, как решить эту проблему, она будет очень признательна.Лучшее,