Das ist mein Szenario: Ich habe zwei Indizes in elasticsearch mit type als "Daten" und "Metadaten" erstellt. Ich versuche, eine Eltern-Kind-Zuordnung zwischen den Daten und den Metadaten herzustellen, wobei die Metadaten das übergeordnete Element der Daten sind. Ich verwende dazu den Elasticsearch Transport Client java api.Elastische Suche Die Typoption des _parent-Feldes kann nicht geändert werden: [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);
}
, aber ich bekomme die folgende fehler-
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)
Ich habe versucht, Online-Suche konnte aber nicht eine konkrete Antwort bekommen. Ich möchte nicht den vorhandenen Index löschen und den Index mit Mapping hinzufügen, da ich bereits vorhandene Informationen im Index habe, die ich verwenden muss. (Einige Leute haben das vorgeschlagen)
Ist das ein Fehler in elasticsearch?
Wenn nicht ist mein Code falsch und wie löse ich es?