Я пытаюсь создать ETL, который извлекает из монго, обрабатывает данные и загружает в эластичный. Я буду выполнять ежедневную загрузку, поэтому я решил присвоить своему индексу текущую дату. Это поможет мне для дальнейшей обработки, которую я должен сделать с этим первым индексом. Я использовал dsl guideasticsearch: 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: это должно быть просто проблемой объектно-ориентированного программирования. Извиняюсь за мое невежество по этому вопросу.