gpt4 book ai didi

java - Elasticsearch 无法更改_parent字段的type选项:[null]-> [metadata]

转载 作者:行者123 更新时间:2023-12-03 01:54:12 25 4
gpt4 key购买 nike

这是我的情况:
我在elasticsearch中创建了两个索引,类型分别为“数据”和“元数据”。
我正在尝试在数据和元数据之间建立父子映射,而元数据是数据的父级。
我正在使用Elasticsearch Transport Client Java api来做到这一点。

              //parent mapping json
String parentMapping = XContentFactory.jsonBuilder()
.startObject()
.startObject(parentType)
.endObject()
.string();
//child mapping json
String childMapping = XContentFactory.jsonBuilder()
.startObject()
.startObject(childType)
.startObject("_parent")
.field("type", parentType)
.endObject()
.endObject()
.endObject()
.string();
System.out.println("childMapping="+childMapping);
System.out.println("parentMapping="+parentMapping);
client.admin().indices().preparePutMapping(indexName).setType(parentType)
.setSource(parentMapping).execute().actionGet();
//This does the mapping
PutMappingRequestBuilder putMappingRequestBuilder = client.admin().indices().preparePutMapping(indexName).setType(childType);
putMappingRequestBuilder.setSource(childMapping);
PutMappingResponse response = putMappingRequestBuilder.execute().actionGet();
if(!response.isAcknowledged()) {
LogManager.log("Could not define mapping for type ["+indexName+"]/["+childType+"]",LogManager.DEBUG);
tries=tries+1;
} else {
mapLoop=true;
LogManager.log("Successfully put mapping for ["+indexName+"]/["+childType+"]",LogManager.DEBUG);
}

但我收到以下错误-
   java.lang.IllegalArgumentException: The _parent field's type option can't be changed: [null]->[metadata]
at org.elasticsearch.index.mapper.internal.ParentFieldMapper.doMerge(ParentFieldMapper.java:389)
at org.elasticsearch.index.mapper.FieldMapper.merge(FieldMapper.java:364)
at org.elasticsearch.index.mapper.MetadataFieldMapper.merge(MetadataFieldMapper.java:75)
at org.elasticsearch.index.mapper.Mapping.merge(Mapping.java:120)
at org.elasticsearch.index.mapper.DocumentMapper.merge(DocumentMapper.java:376)

我尝试在线搜索,但无法获得具体答案。
我不想删除现有索引并通过映射添加索引,因为我在索引中需要使用现有信息(有人建议这样做)。

这是Elasticsearch中的错误吗?

如果不是,我的代码是否不正确,我该如何解决?

最佳答案

无论是“bug”,我不能说,这当然是一个限制,另请参见https://github.com/elastic/elasticsearch/issues/9448

进行此工作的唯一方法是在创建索引时而不是在索引创建时添加_parent(刚刚在5.2.2中进行了验证)。

使用诸如别名之类的可用工具,无需先删除当前索引就可以执行此类操作,但是这需要对步骤进行良好的计划,并且应该进行适当的测试。

关于java - Elasticsearch 无法更改_parent字段的type选项:[null]-> [metadata],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com