首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >弹性搜索中的变映射场结构流

弹性搜索中的变映射场结构流
EN

Stack Overflow用户
提问于 2020-08-03 13:21:23
回答 2查看 1.1K关注 0票数 0

我有一个有映射的索引

代码语言:javascript
代码运行次数:0
运行
复制
{
   "mappings": {
      "properties": {
         "title": {
            "type": "text"
         },
         "location": {
            "type": "keyword"
         }
      }
   }
}

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

代码语言:javascript
代码运行次数:0
运行
复制
{
   "mappings": {
      "properties": {
         "title": {
            "type": "text"
         },
         "location": {
            "properties": {
                "country": {
                    "type": "keyword"
                },
                "state": {
                    "type": "keyword"
                },
                "city": {
                    "type": "keyword"
                }
            }
         }
      }
   }
}

这类移徙的建议流动是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-03 14:30:25

Elasticsearch不允许更改现有字段的映射定义,只允许添加新的字段定义,因为您可以检查这里

所以其中一个可能性是:

  • 创建一个新的字段定义(显然名称不同)来存储新的数据类型。
  • 停止使用位置字段

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

  • 创建具有正确映射的新索引
  • 从旧索引到新索引的数据的再索引

要用正确的格式将数据从旧索引重新索引到新索引,可以使用无痛剧本

代码语言:javascript
代码运行次数:0
运行
复制
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
        
      """
    }
}

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

如果需要相同的索引名,请使用使用正确映射创建的新索引作为备份,然后需要使用旧映射删除索引,并使用正确的映射再次使用相同的名称重新创建索引,并将其他保留索引中的数据带回来。

有关更改映射的更多信息,请阅读变弹性搜索映射

票数 2
EN

Stack Overflow用户

发布于 2020-08-03 14:11:59

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63230241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档