Обновите документы ElasticSearch, читая значения из файла

Я создал индекс ElasticSearch с именем shakespeare (используя Загрузка данных примера) и хотите обновить значение speaker для набора id, У меня есть список идентификаторов, хранящихся в файле Excel.

Я хочу эффективный способ сделать это. Ниже мой код, который работает нормально, но не возвращает мне id значения, для которых обновление не удалось по той или иной причине.

from elasticsearch import Elasticsearch
from openpyxl import load_workbook

ES_AWS_HOST = "74d93e88111f49b39xxxxxxxxxxxxxxx.us-west-1.aws.found.io:9243"
ES_AWS_URL = f"https://{ES_AWS_HOST}"


class ElasticSearchClient:
    def __init__(self):
        self.es_aws_instance = None

    def get_aws_signed_client(self):
        self.es_aws_instance = Elasticsearch([ES_AWS_URL], http_auth=('elastic', 'RYHFCM5ut9NJBuPAmauxxxxx'))

    def update_es_documents(self, value):
        self.es_aws_instance.update(
            index='shakespeare',
            doc_type='doc',
            id=value,
            body={
                "doc": {"speaker": None},
                'doc_as_upsert': True
            }
        )

    def read_ids_from_excel(self):
        wb = load_workbook(filename="raw_data/shakespeare_ids.xlsx", read_only=True)
        ws = wb['Sheet1']

        for row in ws.rows:
            for cell in row:
                self.update_es_documents(cell.value)


esc = ElasticSearchClient()
esc.get_aws_signed_client()
esc.read_ids_from_excel()

Кроме того, мне нужен способ обновить имя поля для определенного индекса. Например, обновить имя поля (с actor в performer) для всех записей, где имя поля actor не является null или же None,

0 ответов

Другие вопросы по тегам