ElasticSearch-重命名类型

ecfdbz9o  于 2023-04-29  发布在  ElasticSearch
关注(0)|答案(3)|浏览(218)

我有一个问题,在ElasticSearch中只重新索引部分索引数据。
使用PHP的ElasticSearch客户端。
假设我有一个索引myindex,类型为type1type2
现在type2中的一些字段发生了变化,我需要更改Map。
在阅读了他们的文档后,我想我可以通过创建一个新类型和创建一个别名来摆脱困境,但不幸的是,似乎你不能为类型创建别名,它只适用于索引。
然后,我想为newtype2创建一个新的临时Map,将数据从type2复制到newtype2并删除type2
但是现在我找不到任何方法来重命名类型。

brjng4g3

brjng4g31#

不,不能重命名类型。
读取this article

ev7lccsx

ev7lccsx2#

我想扩展marcostvz's answer
如果你真的希望现有的索引有类型名称,即使它不能直接完成,你可以做一些其他的索引和重新索引的帮助。
1.创建临时索引。
1.将旧类型的原始索引复制到新类型的临时索引。
1.重新创建(删除并放置)原始索引。
1.将临时索引复制到原始索引。
1.删除临时索引。

在运行代码时,我遇到了数据在过程中丢失的问题。在命令之间添加一个小中断(确切地说是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
holgip5t

holgip5t3#

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

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

将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"
          }
        }
      ]
    }'

相关问题