如果多個類型在Elasticsearch指數具有相同名稱字段,這些字段必須有一個嘗試創建一個「foobar的」屬性作爲字符串和長」相同的映射......爲什麼在Elasticsearch中按字段而不是索引指定字段?
例如,如果你嘗試把下面的索引映射:
{
"mappings": {
"type_one": {
"properties": {
"foobar": {
"type": "string"
}
}
},
"type_two": {
"properties": {
"foobar": {
"type": "long"
}
}
}
}
}
...以下錯誤將返回
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [type_one]: mapper [foobar] cannot be changed from type [long] to [string]"
}
],
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [type_one]: mapper [foobar] cannot be changed from type [long] to [string]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "mapper [foobar] cannot be changed from type [long] to [string]"
}
},
"status": 400
}
以下是來自現場elasticsearch:
Conflicts between fields in different types
字段在兩種不同類型的 具有相同名稱相同的索引必須具有相同的映射,因爲它們是由相同的字段 支持內部。嘗試更新 存在於多個類型中的字段的映射參數將引發異常,除非 指定了update_all_types參數,在這種情況下,它將更新 該參數跨同一索引中具有相同名稱的所有字段。
如果具有相同名稱的字段必須對索引中的所有類型具有相同的映射,那麼爲什麼每個類型都指定了字段映射?爲什麼不指定整個索引的字段,然後確定將哪些字段分配給每種類型。
例如是這樣的:
{
"fields":{
"PropA":{
"type":"string"
},
"PropB":{
"type":"long"
},
"PropC":{
"type":"boolean"
}
},
"types":{
"foo":[
"PropA",
"PropB"
],
"foo":[
"PropA",
"PropC"
],
"foo":[
"PropA",
"PropC",
"PropC"
]
}
}
不喜歡這樣的映射格式更加簡潔,而且什麼是真正允許更好的表現?
我問的原因是因爲我正在創建一個索引模板JSON文件,其中包含大約80個用於15種類型的不同字段。如果不是所有類型,許多字段都用於多個字段。因此,無論何時我需要更新一個字段,我都必須確保每一個字段都使用它來更新它。