我正在尝试将Twitter流式传输到elasticsearch。 如果在流式传输之前不创建任何索引,我没有任何问题,但是以这种方式,我无法按日期筛选和创建时间表。 我尝试使用此映射:
https://gist.github.com/christinabo/ca99793a5d160fe12fd9a31827e74444
据称允许ES正确选择“日期”,但在创建索引时出现此错误:
“类型”:“ illegal_argument_exception”, “ reason”:“未知设置[index.twitter.mappings._doc.properties.coordinates.properties.coordinates.type],请检查是否已安装任何必需的插件,或者查看重大更改文档中已删除的设置”
怎么了?
谢谢
答案 0 :(得分:0)
我正在运行此python脚本。在此之前,我曾尝试通过开发工具使用PUT twitter_stream设置映射。抱歉缩进很糟!
es = Elasticsearch("https://admin:admin@localhost:9200",
verify_certs=False)
es.indices.create(index='twitter_stream', ignore=400)
class StreamApi(tweepy.StreamListener):
status_wrapper = TextWrapper(width=60, initial_indent=' ',
subsequent_indent=' ')
def on_status(self, status):
json_data = status._json
es.index(index="twitter_stream",
doc_type="twitter",
body=json_data,
ignore=400
)
streamer = tweepy.Stream(auth=auth, listener=StreamApi(), timeout=30)
terms = ['#assange', 'assange']
streamer.filter(None,terms)
答案 1 :(得分:0)
阅读日期字段注释后,tweets的日期格式不是default formats supported之一。
为了让ElasticSearch理解为日期字段,您应该为twitter_stream
索引指定一个自定义映射,您可以在其中告诉您期望tweets日期字段的日期格式。解释可自定义日期格式的语法为here。
因此,如果您使用的是Elasticsearch 7.X,则可以通过以下方式指定自定义格式:
PUT twitter_stream
{
"mappings": {
"properties": {
"YOUR_TWEETS_DATE_FIELD": {
"type": "date",
"format": "EEE LLL dd HH:mm:ss Z yyyy"
}
}
}
}
您可以将以上配置复制并执行到Kibana dev工具控制台。然后,尝试再次运行pyhton脚本。 要说明格式中使用的字母:
E day-of-week text Tue; Tuesday; T
M/L month-of-year number/text 7; 07; Jul; July; J
d day-of-month number 10
H hour-of-day (0-23) number 0
m minute-of-hour number 30
s second-of-minute number 55
Z zone-offset offset-Z +0000; -0800; -08:00;
y year-of-era year 2004; 04
此外,无需在映射中定义其他任何内容。 ElasticSearch将使用其动态映射定义其余的字段和类型。