Elasticsearch インデックス内の複数のタイプに同じ名前のフィールドがある場合、それらのフィールドには、文字列と long の両方として「foobar」プロパティを作成しようとする同じマッピングが必要です...
たとえば、次のインデックス マッピングを PUT しようとすると:
{
"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サイトからのものです:
2 つの異なる型の同じ名前を持つ同じインデックス内のフィールドは、同じフィールドによって内部的にサポートされているため、同じマッピングを持つ必要があります。複数のタイプに存在するフィールドのマッピング パラメーターを更新しようとすると、update_all_types パラメーターを指定しない限り、例外がスローされます。この場合、同じインデックス内の同じ名前を持つすべてのフィールドでそのパラメーターが更新されます。
同じ名前のフィールドがインデックス内のすべての型に対して同じマッピングを持つ必要がある場合、型ごとにフィールド マッピングが指定されるのはなぜですか? インデックス全体のフィールドを指定してから、各タイプに割り当てられているフィールドを特定してください。
たとえば、次のようなものです。
{
"fields":{
"PropA":{
"type":"string"
},
"PropB":{
"type":"long"
},
"PropC":{
"type":"boolean"
}
},
"types":{
"foo":[
"PropA",
"PropB"
],
"foo":[
"PropA",
"PropC"
],
"foo":[
"PropA",
"PropC",
"PropC"
]
}
}
このようなマッピング形式は、より簡潔で、実際に許可されているものをより適切に表現するものではないでしょうか?
私が尋ねる理由は、15 の型で使用される約 80 の異なるフィールドを持つインデックス テンプレート JSON ファイルの作成に取り組んでいるためです。フィールドの多くは、すべてではないにしても複数のタイプで使用されます。そのため、フィールドを更新する必要があるときはいつでも、それが使用されているすべてのタイプに対して更新する必要があります。