2

我的操作:

父:国家,子:分支,孙:雇员

PUT /company { "mappings": { "branch": { "_parent": { "type": "country" } }, "employee": { "_parent": { "type": "branch" } } } }

我想添加一个孙子员工2,父母是分支:

PUT /company/employee2/_mapping { "employee2": { "_parent": { "type": "branch" } } }

我收到错误信息:

{ "error": { "root_cause": [ { "type": "illegal_argument_exception", "reason": "无法添加指向已存在类型的 _parent 字段" } ], "type": "illegal_argument_exception" , "reason": "无法添加指向已存在类型的 _parent 字段" }, "status": 400 }

我不知道我该怎么办。有什么建议吗?谢谢。

4

2 回答 2

9

这是在 elasticsearch 2.0 中施加的限制。这在 2.0 的重大更改中有所提及。然而,这背后的原因在文件中并不清楚。

以下是弹性搜索开发人员 martijnvg 在弹性搜索上发布的讨论线程:

新的子类型不能指向现有类型作为父类型。

这与新的父/子实现的事实有关,父类型和子类型都将 id 存储在连接字段中。如果 type 在创建后成为父级,则父文档可能已被索引,但未将其 id 存储在连接字段中。因此,存在此限制。

这仅适用于升级到 ES 2.0 后创建的新索引。出于迁移目的,此限制不适用于在升级到 ES 2.0 之前创建的索引。事实上,在 ES 1.x 上和使用旧的父/子实现之前创建。

你可以在这里阅读: https ://discuss.elastic.co/t/adding-child-types-in-2-0/33267

于 2015-11-12T16:28:05.583 回答
0

好的,我发现了问题-删除索引后,您无法使用现有类型创建父子关系一切都很好

于 2018-11-28T14:48:50.637 回答