在父类型已存在之后创建父子关系

时间:2016-01-28 18:57:55

标签: elasticsearch

我尝试将新类型添加为现有类型的子类。从ElasticSearch documentation开始,看起来这是可能的,但没有关于如何做到这一点的细节。

以下是文档说的内容:

  

这必须在索引创建时完成,或者在创建子类型之前使用update-mapping API完成。

没有关于在update-mapping API documentation中设置父子关系的详细信息。

直观地说,我认为在父母已经存在之后应该允许建立父子关系,因为父母不需要知道关于孩子的任何事情。

这是我作为孩子创建新类型时遇到的错误:

{
"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
}

3 个答案:

答案 0 :(得分:2)

这在ElasticSearch中是不允许的,因此它要求在同一个请求或调用中同时创建父级和子级。

答案 1 :(得分:0)

回答我自己的问题。找到了this post,解释了为什么这是不可能的。该文件仍然具有误导性,因为它声称这是可能的。

答案 2 :(得分:0)

对于使用 Spring Data Elasticsearch 3.0.x(ES 5.x)的任何人:当您具有用于父级和子级实体(文档)的单独存储库并且父存储库被实例化时,会发生此错误首先(依次定义父映射)。

解决方法是解决创建存储库的顺序,例如像这样:

/**
 * Workaround: Child ES type must be defined before the parent. The order matters!
 */
@Configuration
@DependsOn({"childRepository", "parentRepository"})
public class ElasticConfig {
}