[英]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.