【问题标题】:Changing mapping fields structure flow in Elasticsearch在 Elasticsearch 中更改映射字段结构流程
【发布时间】:2020-11-23 13:37:17
【问题描述】:

我有一个包含映射的索引

{
   "mappings": {
      "properties": {
         "title": {
            "type": "text"
         },
         "location": {
            "type": "keyword"
         }
      }
   }
}

location 字段中,我们正在存储城市名称。 我们需要改变映射结构来存储国家和州,所以映射将是

{
   "mappings": {
      "properties": {
         "title": {
            "type": "text"
         },
         "location": {
            "properties": {
                "country": {
                    "type": "keyword"
                },
                "state": {
                    "type": "keyword"
                },
                "city": {
                    "type": "keyword"
                }
            }
         }
      }
   }
}

这种迁移的推荐流程是什么?

【问题讨论】:

    标签: elasticsearch elasticsearch-java-api elasticsearch-mapping


    【解决方案1】:

    【讨论】:

    【解决方案2】:

    Elasticsearch 不允许更改现有字段的映射定义,只允许添加新字段定义,您可以查看 here

    所以一种可能性是:

    • 创建一个新的字段定义,显然具有不同的名称,以存储新的数据类型。

    • 停止使用位置字段

    另一个但代价高昂的可能性是:

    • 使用正确的映射创建新索引
    • reindex的数据从旧索引到新索引

    要将具有正确格式的旧索引中的数据重新索引到新索引,您可以使用painless script

    POST /_reindex
    {
      "source": {
        "index": "old_index_name"
      },
      "dest": {
        "index": "new_index_name"
      },
     "script": {
        "lang": "painless",
         "params" : {
             "location":{
                "country" : null,
                 "state": null,
                 "city": null
         }
        },
        "source": """
            params.location.city = ctx._source.location
            ctx._source.location = params.location
            
          """
        }
    }
    

    在您可以更新旧数据的国家和州字段之后。

    如果您需要相同的索引名称,请将您创建的具有正确映射的新索引用作备份,然后您需要删除具有旧映射的索引并使用正确的映射重新创建具有相同名称的索引,然后带上其他储备索引中的数据。

    有关更改映射的更多信息,请阅读CHANGE ELASTIC SEARCH MAPPING

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2017-10-13
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多