在Elasticsearch DSL中重置索引名称

时间:2019-10-07 20:03:34

标签: python elasticsearch elasticsearch-dsl

我正在尝试创建一个从mongo中提取,处理数据并将其加载为弹性的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:这一定只是一个面向对象的编程问题。抱歉,我对此一无所知。

2 个答案:

答案 0 :(得分:1)

也许您可以利用Lines <- "Site value NR <0.02500 NR <0.02500 NR <0.02500 NR <0.02500 NR <0.02500 NR <0.02500 NR 0.01 NR 0.01 NR 0.01 NR 0.02 NR 0.01 NR 0.01 NR 0.01 NR 0.01 NR 0.01 NR <0.05100 NR <0.05100 NR <0.05100 NR <0.05000 NR <0.05000 NR <0.05000 NR <0.05000 NR <0.05000 NR <0.05000 NR 0.02 NR 0.017 NR 0.031 NR 0.025 NR 0.023 NR 0.024 NR 0.023" dat <- read.table(text = Lines, header = TRUE, as.is = TRUE) Trello Api的事实。如果要自动设置索引名称,可以在Document.init()类中实现init()并在实现中调用News

一个简化的示例(python 3.x):

super().init(...)

答案 1 :(得分:0)

您可以在调用 save()时覆盖索引。

new_insert.save('processed_news_' + datetime.datetime.now().strftime("%Y%m%d"))