我注意到logstash会创建一个额外的"关键字"索引映射中的字段,用于从日志文件中提取的每个字符串字段,并发送到弹性搜索。
我已经使用prune plugin完全删除了许多字段,但还有其他字段我不想完全删除,但我也不需要他们有一个* .keyword。
有没有办法让logstash只为某些字段而不是其他字段创建* .keyword字段?具体来说,是否有一种方法可以让logstash拥有一个字段白名单,可以为其创建* .keywords,而不是为其他任何内容创建?
(使用elasticsearch 6.x)
答案 0 :(得分:0)
我认为您需要更改所需字段的映射。映射页面显示默认文本类型映射:
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/breaking_50_mapping_changes.html
我尝试设置一个没有关键字字段的字段,除非您无法在该字段上进行聚合(我尝试了术语聚合),即使您在映射中设置了index:true也是如此。我可能错过了一些东西,但我认为这是你应该开始的地方。
答案 1 :(得分:0)
我现在使用的解决方案是dynamic templates。 我可以将一些字段映射到文本,将其他字段映射到文本和关键字。例如:
{
"mappings": {
"doc": {
"dynamic_templates": [
{
"match_my_custom_fields": {
"match_mapping_type": "string",
"match": "custom_prefix_*",
"mapping": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
{
"strings_as_keywords": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword",
"ignore_above": 256
}
}
}
],
"properties": {
"geoip": {
"dynamic": true,
"properties": {
"ip": {
"type": "ip"
},
"location": {
"type": "geo_point"
},
"latitude": {
"type": "half_float"
},
"longitude": {
"type": "half_float"
}
}
}
}
}
}
这样,以custom_prefix_
开头的所有内容都会包含文字和关键字字段,其他所有内容都只会包含关键字。
当然,我以某种方式打破了geoip.geo_point
logstash插件发出的geoip
,现在我的地图可视化工作无法正常工作,所以我需要弄清楚如何恢复这一点。
编辑:让geo_point再次运行,请参阅" geoip"丙