如何将多个弹性搜索类型重新编入具有单一类型的新索引?

时间:2017-12-03 17:48:05

标签: elasticsearch

我正在从ElasticSearch 5.6升级到6.0,并且我有标准的logstash- *索引。在那些索引中,我有多个(doc)类型" attachmentsDbStats"和" attachmentsFileStats"它具有相同的架构。唯一的区别是_type和type的值。我创建了一个新的索引附件 - *其中类型是"附件"我想将两种类型的文档重新索引到新索引中。显然,在6.0中新的单一类型限制的b / c,都需要具有相同的类型。我更新了旧索引中的所有文档,以便"键入"字段具有值"附件。"当我运行reindex时,由于单一类型的限制,我无法上传文档。我试图更新旧索引中的_type字段,但这是不可变的。有什么想法如何在转换过程中重新索引和转换类型?

2 个答案:

答案 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';"
  }
}