无法使用Elasticsearch + Kibana + Twitter正确映射日期

时间:2019-04-11 13:55:19

标签: elasticsearch twitter

我正在尝试将Twitter流式传输到elasticsearch。 如果在流式传输之前不创建任何索引,我没有任何问题,但是以这种方式,我无法按日期筛选和创建时间表。 我尝试使用此映射:

https://gist.github.com/christinabo/ca99793a5d160fe12fd9a31827e74444

据称允许ES正确选择“日期”,但在创建索引时出现此错误:

“类型”:“ illegal_argument_exception”, “ reason”:“未知设置[index.twitter.mappings._doc.properties.coordinates.properties.coordinates.type],请检查是否已安装任何必需的插件,或者查看重大更改文档中已删除的设置”

怎么了?

谢谢

2 个答案:

答案 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将使用其动态映射定义其余的字段和类型。