我准备将弹性搜索服务器的更新从1.4发布到2.X版本。 我已使用提供的工具(https://github.com/elastic/elasticsearch-migration/tree/1.x)准备了迁移,并且我有映射冲突。
冲突的字段映射:
Mapping for field nginx_access:timestamp conflicts with: nginx_error:timestamp. Check parameters: format, norms.enabled, type
实际上,格式不同:
$ curl -XGET /_mapping/nginx_access/field/timestamp?pretty
{
"timestamp" : {
"full_name" : "timestamp",
"mapping":{"timestamp":{"type":"string","norms":{"enabled":false},"fields":{"raw":{"type":"string","index":"not_analyzed","ignore_above":256}}}}
}
}
$ curl -XGET /_mapping/nginx_error/field/timestamp?pretty
{
"timestamp" : {
"full_name" : "timestamp",
"mapping":{"timestamp":{"type":"date","format":"yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"}}
}
}
我知道我无法更改映射类型,因此我需要使用新映射重新创建索引。但是, Logstash 可以创建映射(动态?),而且我没有为此配置任何配置。我可以复制索引,只是在索引之前动态更改单个映射类型吗?事实上,我真的不知道如何。在我看来,重新创建索引非常复杂(其中有很多其他文档类型都有很多其他映射)。
我想一劳永逸地更新我的旧索引 - 并且所有时间戳都具有相同的类型,最好。
最简单的解决方案是什么?是否有自动执行此操作的插件? (对于1.4版本)
谢谢!
答案 0 :(得分:0)
映射不是由Logstash创建的,它们是Elasticsearch在收到文档时动态创建的(取决于字段的内容)。
您无法更新现有映射,您必须创建新索引,并且在重建索引时,您必须确保时间戳具有相同的类型,以便它们的映射相同。
您可以在创建索引时指定要使用的Index pattern,这将在Elasticsearch创建索引时使用。该模式可以指定您不希望动态生成的映射。你的看起来像这样:
Debug
我希望它有所帮助。