Если несколько типов в индексе 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 типах. Многие из полей используются для нескольких, если не всех типов. Поэтому в любое время, когда мне нужно обновить поле, я должен убедиться, что обновляю его для каждого типа, где он используется.