0
這是我的場景: 我在elasticsearch中創建了兩個類型爲「data」和「metadata」的索引。 我正嘗試在數據和元數據之間建立一個父 - 子映射,其中元數據是數據的父級。 我正在使用elasticsearch傳輸客戶端java api來執行此操作。彈性搜索_parent字段的類型選項不能更改:[null] - > [metadata]
//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的錯誤嗎?
如果不是我的代碼不正確,我該如何解決它?