我已经使用Logstash到Elasticsearch的XML过滤器插件成功地获取了数据,但是所有字段类型都是“text”类型。
有没有办法手动或自动指定正确的类型?
答案 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。如果你有这个问题并且你的数据库是一个测试数据库,你可以删除所有旧数据只是删除索引,直到现在没有冲突(例如你有一个字段,直到现在文本,现在它被接收为日期旧数据和新数据之间会发生冲突)。如果您不能只删除旧数据,请阅读我链接的链接中的答案。