【问题标题】:Elastic search - renaming a type弹性搜索 - 重命名类型
【发布时间】:2016-08-06 15:15:23
【问题描述】:

我在弹性搜索中仅重新索引部分索引数据时遇到问题。

使用 PHP 弹性搜索客户端。

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

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

在阅读了他们的文档后,我认为我可以通过创建一个新类型并创建一个别名来摆脱困境,但不幸的是,你似乎不能为类型设置别名,它只适用于索引。

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

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

【问题讨论】:

    标签: php elasticsearch indexing


    【解决方案1】:

    不,您不能重命名类型。

    阅读这篇文章: https://www.elastic.co/blog/changing-mapping-with-zero-downtime

    【讨论】:

      【解决方案2】:

      我想扩展marcostvz's answer

      如果您确实希望现有索引具有类型名称,即使不能直接完成,您也可以借助其他索引和重新索引来实现。

      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
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多