我有一个字段的现有映射,我想将其更改为多字段。
现有的映射是
{
"my_index": {
"mappings": {
"my_type": {
"properties": {
"author": {
"type": "string"
},
"isbn": {
"type": "string",
"analyzer": "standard",
"fields": {
"ngram": {
"type": "string",
"search_analyzer": "keyword"
}
}
},
"title": {
"type": "string",
"analyzer": "english",
"fields": {
"std": {
"type": "string",
"analyzer": "standard"
}
}
}
}
}
}
}
}
根据documentation,我应该可以更改" author"执行以下
到多字段PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"author":
{
"type": "multi-field",
"fields": {
"ngram": {
"type": "string",
"indexanalyzer": "ngram_analyzer",
"search_analyzer": "keyword"
},
"name" : {
"type": "string"
}
}
}
}
}
}
}
但我得到以下错误:
{
"error": "IndexAlreadyExistsException[[my_index] already exists]",
"status": 400
}
我错过了一些非常明显的东西吗?
答案 0 :(得分:1)
而不是PUT到/ my_index执行:
POST /my_index/_mapping
答案 1 :(得分:1)
您无法更改现有索引中的字段类型。 如果您无法重新创建索引,则可以使用复制到字段来实现类似的功能。
PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"author":
{
"type": "string",
"copy_to": ["author-name","author-ngram"]
}
"author-ngram": {
"type": "string",
"indexanalyzer": "ngram_analyzer",
"search_analyzer": "keyword"
},
"author-name" : {
"type": "string"
}
}
}
}
}
}
答案 2 :(得分:1)
虽然我没有在您的特定示例中尝试过,但确实可以通过先关闭索引然后应用映射来更新字段映射。
示例:
POST /my_index/_close
POST /my_index/_mapping
{
"my_field:{"new_mapping"}
}
POST /my_index/_open
我已通过向映射字段添加“copy_to”映射属性对其进行了测试。