My operation:
parent: country, child: branch, grandchild: employee
PUT /company { "mappings": { "branch": { "_parent": { "type": "country" } }, "employee": { "_parent": { "type": "branch" } } } }
I want add a grandchild employee2, parent is branch:
PUT /company/employee2/_mapping { "employee2": { "_parent": { "type": "branch" } } }
I get wrong message:
{ "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "can't add a _parent field that points to an already existing type" } ], "type": "illegal_argument_exception", "reason": "can't add a _parent field that points to an already existing type" }, "status": 400 }
I don't know how can i do. Have any suggestion? Thanks.
答案 0 :(得分:9)
这是elasticsearch 2.0中的限制。 这在http://localhost中提到。然而,背后的原因在文件中并不清楚。
下面是关于elasticsearch的弹性搜索开发者martijnvg讨论线程的问题:
新的子类型不能指向现有类型作为父类型。
这与新父母/子女的事实有关 实现父类型和子类型在连接字段中存储ID。 如果type在创建之后成为父级,则为parent 文档可能已编入索引,但未在联接中存储其ID 领域。因此存在这种限制。
这仅适用于升级到ES 2.0后创建的新索引。 出于迁移目的,此限制不适用于索引 在升级到ES 2.0之前创建。实际上是在ES 1.x上创建的 在使用旧的父/子实现之前。
你可以在这里阅读: breaking changes in 2.0
答案 1 :(得分:0)
好 我发现了问题-您无法使用现有类型创建父子关系 删除索引后,一切都很好