我正在从ElasticSearch 5.6升级到6.0,并且我有标准的logstash- *索引。在那些索引中,我有多个(doc)类型" attachmentsDbStats"和" attachmentsFileStats"它具有相同的架构。唯一的区别是_type和type的值。我创建了一个新的索引附件 - *其中类型是"附件"我想将两种类型的文档重新索引到新索引中。显然,在6.0中新的单一类型限制的b / c,都需要具有相同的类型。我更新了旧索引中的所有文档,以便"键入"字段具有值"附件。"当我运行reindex时,由于单一类型的限制,我无法上传文档。我试图更新旧索引中的_type字段,但这是不可变的。有什么想法如何在转换过程中重新索引和转换类型?
答案 0 :(得分:0)
这样的事情应该让你开始:
POST _reindex
{
"source": {
"index": "logstash-*"
},
"dest": {
"index": "attachments-*"
},
"script": {
"source": """
ctx._id = ctx._type + "-" + ctx._id;
ctx._source.type = ctx._type;
ctx._type = "attachement";
"""
}
}
将_type
和_id
合并到新的_id
字段中,因此它绝对是唯一的。将_type
字段移至自定义type
。并将_type
设置为"附件" (请注意,Elastic使用的约定使用" doc"作为默认类型,但只要有一种类型,您就可以选择任何你想要的内容。)
答案 1 :(得分:0)
感谢您的提示。修复我上面的一些拼写错误就可以解决问题了:
POST _reindex {
"source": {
"index": "logstash-*",
"query": {
"bool": {
"must": {
"term": {
"type": "attachments"
}
}
}
}
},
"dest": {
"index": "attachments.old"
},
"script": {
"source": "ctx._id = ctx._type + '-' + ctx._id; ctx._source.type = ctx._type; ctx._type = 'attachments';"
}
}