我正在尝试创建一个从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:这一定只是一个面向对象的编程问题。抱歉,我对此一无所知。
答案 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"))