#python #elasticsearch
Вопрос:
У меня есть два индекса в elasticsearch, которые я прокручиваю с помощью python. Я ищу, существует ли определенное значение поля в одном индексе в другом индексе, и если это правда, я обновляю второй индекс:
for row in helpers.scan(es,index='mc_raw',scroll='25m',query={'query':{'bool':{'must':[{'exists':{'field':'marque'}}],'must_not':[{'exists':{'field':'id_master'}}]}}}):
for line in helpers.scan(es,index="mc_master",scroll='25m',query={"query": {"match_all": {}}}):
if row["_source"]["ref_fr"] == line["_source"]["ref_fr"] and row["_source"]["marque"] == line["_source"]["marque"] and row["_source"]["source"] == line["_source"]["source"] :
es.update(index='mc_raw',id=row["_id"],body={"doc":{"id_master":line["_id"]}})
es.update_by_query(index='mc_master',body={"script": {"source": "if (!(ctx._source.raw_id instanceof Collection)) {ctx._source.raw_id = [ctx._source.raw_id];} ctx._source.raw_id.add(params.newsupp)","lang": "painless","params":{"newsupp":row["_id"]}},"query": {"match": {"_id":line["_id"]}}})
Это работает, но занимает слишком много времени. Как я могу это ускорить?