我正在尝试添加一个新类型作为现有类型的子类型。从ElasticSearch documentation上看,这看起来是可能的,但没有关于如何做到这一点的细节。
以下是文档中所说的:
这必须在创建索引时完成,或者在创建子类型之前使用更新映射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
}
发布于 2017-04-03 13:31:34
这在ElasticSearch中是不允许的,因此它要求在同一请求或调用中同时创建父对象和子对象。
发布于 2016-01-29 03:15:22
回答我自己的问题。找到了解释这不可能的原因的this post。文档仍然具有误导性,因为它声称这是可能的。
发布于 2019-03-20 04:21:47
对于任何使用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 {
}
https://stackoverflow.com/questions/35069735
复制相似问题