我的操作:
父母:国家/地区,孩子:分支机构,孙子:员工
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“ ,“原因”:“无法添加指向现有类型的_parent字段”},“状态”:400}
我不知道该怎么办。有什么建议吗?谢谢。
这是Elasticsearch 2.0中施加的限制。在2.0的重大更改中提到了这一点。但是,这背后的原因在文档中尚不清楚。
以下是Elasticsearch开发人员在elasticsearch上发布的martijnvg讨论线程:
新的子类型不能将现有类型指定为父类型。 这与以下事实有关:对于新的父/子实现,父和子类型都将id存储在连接字段中。如果类型在创建后成为父项,则可能已索引未在连接字段中存储其ID的父级文档。因此,存在此限制。 这仅适用于升级到ES 2.0之后创建的新索引。出于迁移目的,此限制不适用于升级到ES 2.0之前创建的索引。实际上是在ES 1.x上创建的,并且在使用旧的父/子实现之前。
新的子类型不能将现有类型指定为父类型。
这与以下事实有关:对于新的父/子实现,父和子类型都将id存储在连接字段中。如果类型在创建后成为父项,则可能已索引未在连接字段中存储其ID的父级文档。因此,存在此限制。
这仅适用于升级到ES 2.0之后创建的新索引。出于迁移目的,此限制不适用于升级到ES 2.0之前创建的索引。实际上是在ES 1.x上创建的,并且在使用旧的父/子实现之前。
您可以在这里阅读有关内容:https : //discuss.elastic.co/t/adding-child-types- in-2-0/33267