繁体   English   中英

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

[英]Specifying Field Types Indexing from Logstash to Elasticsearch

我已经使用XML过滤器插件从Logstash到Elasticsearch成功摄取了数据,但是所有字段类型均为“文本”类型。

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

您要做的是指定一个映射模板

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尤其重要,因为它告诉Elastic如何应用此模板。 您可以设置一个索引模式数组,并且可以在通配符中适当地使用*。 即logstash的默认值是按日期轮换。 它们看起来像logstash-2018.04.23所以您的模式可能是logstash-* ,任何与该模式匹配的模式都会收到模板。

如果要基于某种模式进行匹配,则可以使用动态模板

编辑:在此处添加一些更新,如果您希望logstash为您应用模板,则这里是您要了解的设置的链接。

我发现以下技术非常适合我使用:

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

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

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

完成此操作后,您可能会遇到此问题 如果您有此问题,并且您的数据库是测试数据库,则可以删除所有旧数据,只需删除索引,直到现在不存在冲突为止(例如,您有一个直到现在为止都是文本的字段,现在都以日期,新旧数据之间会有冲突)。 如果您不能只擦除旧数据,请阅读我链接的链接中的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM