指定从Logstash到Elasticsearch的字段类型索引

时间:2018-04-23 20:18:11

标签: elasticsearch logstash

我已经使用Logstash到Elasticsearch的XML过滤器插件成功地获取了数据,但是所有字段类型都是“text”类型。

有没有办法手动或自动指定正确的类型?

2 个答案:

答案 0 :(得分:1)

您要做的是指定mapping template

PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "type1": {
      "_source": {
        "enabled": false
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z YYYY"
        }
      }
    }
  }
}

更改设置以符合您的需求,例如列出属性以映射您希望它们映射到的内容。

设置 index_patterns 特别重要,因为它告诉弹性如何应用此模板。您可以设置索引模式数组,并可以使用*作为通配符。即logstash的默认值是按日期轮换。它们看起来像logstash-2018.04.23,因此您的模式可能是logstash-*,任何与模式匹配的模式都会收到模板。

如果您想根据某种模式进行匹配,则可以使用dynamic templates

修改:在此处添加一点点更新,如果您希望logstash为您应用模板,这里有一个指向settings的链接,您希望了解

答案 1 :(得分:1)

我发现以下技术对我有用:

Logstash会过滤数据并将字段从默认值 - 文本更改为您想要的任何形式。将找到文档here。文档中给出的示例是:

filter {
  mutate {
    convert => { "fieldname" => "integer" }
  }
}

您可以在正文部分的 /etc/logstash/conf.d/02 -... 文件中添加。我认为这种做法的缺点是,根据我的理解,不建议改变进入ES的数据。

执行此操作后,您可能会获得this problem。如果你有这个问题并且你的数据库是一个测试数据库,你可以删除所有旧数据只是删除索引,直到现在没有冲突(例如你有一个字段,直到现在文本,现在它被接收为日期旧数据和新数据之间会发生冲突)。如果您不能只删除旧数据,请阅读我链接的链接中的答案。