Я пытаюсь создать ETL, который извлекает из монго, обрабатывает данные и загружает в эластичный. Я буду выполнять ежедневную загрузку, поэтому я решил назвать свой индекс текущей датой. Это поможет мне для последующей обработки, которую мне нужно сделать с этим первым индексом. Я использовал руководство по elasticsearch dsl: https://elasticsearch-dsl.readthedocs.io/en/latest/persistence.html Проблема, с которой я столкнулся, связана с моим небольшим опытом работы с классами. Я не знаю, как сбросить имя индекса из класса. Вот мой код для класса (custom_indices.py):
from elasticsearch_dsl import Document, Date, Integer, Keyword, Text
from elasticsearch_dsl.connections import connections
from elasticsearch_dsl import Search
import datetime
class News(Document):
title = Text(analyzer='standard', fields={'raw': Keyword()})
manual_tagging = Keyword()
class Index:
name = 'processed_news_'+datetime.datetime.now().strftime("%Y%m%d")
def save(self, ** kwargs):
return super(News, self).save(** kwargs)
def is_published(self):
return datetime.now() >= self.processed
И это часть кода, где я создаю экземпляр этого класса:
from custom_indices import News
import elasticsearch
import elasticsearch_dsl
from elasticsearch_dsl.connections import connections
import pandas as pd
import datetime
connections.create_connection(hosts=['localhost'])
News.init()
for index, doc in df.iterrows():
new_insert = News(meta={'id': doc.url_hashed},
title = doc.title,
manual_tagging = doc.customTags,
)
new_insert.save()
Каждый раз, когда я вызываю класс «Новости», я ожидаю, что у меня будет новое имя. Однако имя не изменится, даже если я снова загружу класс (из custom_indices import News). Я знаю, что это только проблема, с которой я столкнулся при тестировании, но я хотел бы знать, как принудительно выполнить этот «сброс». На самом деле, я изначально хотел изменить имя вне класса с помощью этой строки прямо перед циклом:
News.Index.name = "NEW_NAME"
Однако это не сработало. Я все еще видел имя, определенное в классе. Кто-нибудь может помочь? Большое спасибо! PS: это должно быть просто проблема объектно-ориентированного программирования. Извиняюсь за невежество в теме.