我为两个父/子相关文档创建了两个 Spring-Data elasticsearch 存储库。您可以看到它们的文档类here https://github.com/ltsallas/spring-data-elastic-test/blob/master/src/main/java/com/example/domain/ParentEntity.java.
借助像这样的 repositories 元素,存储库在 XML 中被实例化
<elasticsearch:repositories base-package="com.acme.repositories" />
您可以在以下位置找到该问题的完整示例this https://github.com/ltsallas/spring-data-elastic-testgithub 仓库。我的源代码基于中找到的测试spring-data-elasticsearch 仓库 https://github.com/spring-projects/spring-data-elasticsearch/tree/master/src/test/java/org/springframework/data/elasticsearch。源代码仅包含两个域类(父类、子类)、相关存储库、xml 配置文件和一个单元测试类 https://github.com/ltsallas/spring-data-elastic-test/blob/master/src/test/java/com/example/DemoApplicationTests.java.
克隆并运行mvn test
, 抛出java.lang.IllegalArgumentException: can't add a _parent field that points to an already existing type, that isn't already a parent
似乎这种父/子关系会产生弹性搜索异常,这在Elasticsearch端 https://stackoverflow.com/questions/33670057/elasticsearch-2-0-parent-child-grandchild/,但我不知道在执行Spring Data测试时如何防止这种情况发生。
如果您仍在寻找答案,我通过在父级的 @Document 中设置 createIndex=false 解决了这个问题。
并在 bean 中手动创建它
elasticSearchTemplate.createIndex(Parent.class);
elasticSearchTemplate.putMapping(parent.class);
elasticSearchTemplate.createIndex(Child1.class);
elasticSearchTemplate.createIndex(Child2.class);
这应该首先创建父级,然后创建关联的子级。
另外,在更新映射之前请先清除文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)