更改索引类型映射中 属性 的类型

Changing type of property in index type's mapping

我有类型 'T1' 的索引映射如下:

"T1" : {
    "properties" : {
        "prop1" : {
            "type" : "text"
        }
    }
}

现在我想将 prop1 的类型从 text 更改为 keyword。我不想删除索引。我还读到有人建议用新类型创建另一个 属性 并替换它。但是后来我必须更新我不感兴趣的旧文件。我尝试如下使用 PUT api 但我从来没有用过。

PUT /indexName/T1/_mapping -d
{
    "T1" : {
        "properties" : {
            "prop1" : {
                "type" : "keyword"
            }
        }
    }
}

有什么办法可以实现吗?

映射一旦持久化就无法更新。唯一的选择是使用正确的映射创建一个新索引,并使用 ES 提供的重建索引 API 重新索引您的数据。

您可以在此处阅读有关重建索引 API 的信息: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/docs-reindex.html

无法修改映射,因此您使用的 PUT api 将不起作用。必须使用要使用的更新映射创建新索引,并将所有数据重新索引到新索引。 为防止停机,您始终可以使用别名: https://www.elastic.co/blog/changing-mapping-with-zero-downtime