弹性搜索-重命名类型


Elastic search - renaming a type

在弹性搜索中,我遇到了只对部分索引数据进行重新索引的问题。

使用PHP弹性搜索客户端。

假设我有一个类型为type1type2的索引myindex

现在type2中的一些字段发生了更改,我需要更改映射。

在阅读了他们的文档后,我认为我可以通过创建一个新类型和创建一个别名来逃脱惩罚,但不幸的是,似乎不能为类型提供别名,它只适用于索引。

然后,我想为newtype2创建一个新的临时映射,将数据从type2复制到newtype2并删除type2

但现在我找不到任何方法来重命名类型。

不,不能重命名类型。

阅读这篇文章。

我想扩展marcostvz的答案。

如果您真的希望现有索引具有类型名称,即使不能直接执行,也可以在其他索引和重新索引的帮助下执行。

  1. 创建临时索引
  2. 将旧类型的原始索引复制到新类型的临时索引
  3. 重新创建(删除并放置)原始索引
  4. 将临时索引复制到原始索引
  5. 删除临时索引

在运行代码时,我遇到了数据在这个过程中丢失的问题。在命令之间添加一点中断(确切地说是sleep 5)解决了问题

curl -XPUT localhost:9200/index_tmp &&
curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '
{
  "source": {
    "index": "index",
    "type": "OldType"
  },
  "dest": {
    "index": "index_tmp",
    "type": "NewType"
  }
}' &&
curl -XDELETE localhost:9200/index &&
curl -XPUT localhost:9200/index &&
curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '
{
  "source": {
    "index": "index_tmp"
  },
  "dest": {
    "index": "index"
  }
}' &&
curl -XDELETE localhost:9200/index_tmp

重命名类型最接近的方法是使用新索引(使用新类型):

  • 创建新索引(使用新类型,我使用的是模板)
  • 使用新类型重新编制索引
  • 删除旧索引
  • 创建一个别名(可以用作旧的命名)

将flb_type重命名为_doc:的示例

    export INDEX=log-2019.03.12 &&
    curl -XPUT localhost:9200/$INDEX-v2 &&
    curl -XPOST localhost:9200/_reindex -H 'Content-Type: application/json' -d '
    {
      "source": {
        "index": "'$INDEX'",
        "type": "flb_type"
      },
      "dest": {
        "index": "'$INDEX'-v2",
        "type": "_doc"
      }
    }' &&
    curl -XDELETE localhost:9200/$INDEX &&
    curl -XPOST localhost:9200/_aliases -H 'Content-Type: application/json' -d '
    {
      "actions": [
        {
          "add":
          {
            "alias": "'$INDEX'",
            "index": "'$INDEX'-v2"
          }
        }
      ]
    }'