【问题标题】:Can't map date correctly with elasticsearch + kibana + twitter无法使用 elasticsearch + kibana + twitter 正确映射日期
【发布时间】:2019-09-02 04:36:11
【问题描述】:

我正在尝试将 twitter 流式传输到 elasticsearch。 如果我在流式传输之前不创建任何索引,我没有任何问题,但是这样我就无法按日期过滤并创建时间线。 我尝试使用此映射:

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

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

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

怎么了?

谢谢

【问题讨论】:

  • 您如何发送请求? cURL、邮递员、kibana、其他?
  • 您的要求如何?它似乎格式不正确,因为它会将您的映射与索引设置混淆。

标签: elasticsearch twitter


【解决方案1】:

我正在运行这个 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) 

【讨论】:

  • 文档是否在没有任何自定义映射的情况下正确插入twitter_stream?如果是,您的“假定”date 字段(未被识别为date 字段)的格式如何?
  • 是的,没有任何映射文档被正确插入。推文中日期字段的格式为“Sat Oct 11 22:14:45 +0000 2014”
【解决方案2】:

阅读日期字段评论后,推文的日期格式不是default formats supported之一。

为了让 ElasticSearch 了解作为日期字段,您应该为 twitter_stream 索引指定自定义映射,您可以在其中告诉推文日期字段您期望的日期格式。解释可自定义日期格式的语法是 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 开发工具控制台。然后,尝试再次运行 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 将使用其动态映射定义其余字段和类型。

【讨论】:

  • 谢谢。我还在 6.7.1 上。你能帮忙看一下代码吗?非常感谢:)
  • 在 6.x 版本中,您必须放置索引的 doc_type,而您的则是 doc_type=twitter。像这样指定映射:PUT twitter_stream { "mappings": { "twitter":{ "properties": { "YOUR_TWEETS_DATE_FIELD": { "type": "date", "format": "EEE LLL dd HH:mm:ss Z yyyy" } } } } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多