diff --git a/server/src/main/java/org/elasticsearch/search/SearchHit.java b/server/src/main/java/org/elasticsearch/search/SearchHit.java index 8943792e6d12fb..1bdb1ecaf40855 100644 --- a/server/src/main/java/org/elasticsearch/search/SearchHit.java +++ b/server/src/main/java/org/elasticsearch/search/SearchHit.java @@ -168,7 +168,7 @@ public SearchHit(StreamInput in) throws IOException { if (in.readBoolean()) { explanation = readExplanation(in); } - if (in.getVersion().onOrAfter(Version.V_8_0_0)) { + if (in.getVersion().onOrAfter(Version.V_7_3_0)) { documentFields = readFields(in); metaFields = readFields(in); } else { @@ -235,7 +235,7 @@ public void writeTo(StreamOutput out) throws IOException { writeExplanation(out, explanation); } - if (out.getVersion().onOrAfter(Version.V_8_0_0)) { + if (out.getVersion().onOrAfter(Version.V_7_3_0)) { writeFields(out, documentFields); writeFields(out, metaFields); } else { @@ -297,13 +297,13 @@ private void writeFields(StreamOutput out, Map fields) t } } - private void splitFieldsByMetadata(Map fields, Map outOther, + private void splitFieldsByMetadata(Map fields, Map outDocument, Map outMetadata) { for (Map.Entry fieldEntry: fields.entrySet()) { if (fieldEntry.getValue().isMetadataField()) { outMetadata.put(fieldEntry.getKey(), fieldEntry.getValue()); } else { - outOther.put(fieldEntry.getKey(), fieldEntry.getValue()); + outDocument.put(fieldEntry.getKey(), fieldEntry.getValue()); } } } @@ -488,11 +488,9 @@ public Map fieldsOrNull() { } public void fields(Map fields) { - this.metaFields.clear(); - this.documentFields.clear(); - if (fields == null) { - return; - } + Objects.requireNonNull(fields); + this.metaFields = new HashMap(); + this.documentFields = new HashMap(); for (Map.Entry fieldEntry: fields.entrySet()) { if (fieldEntry.getValue().isMetadataField()) { this.metaFields.put(fieldEntry.getKey(), fieldEntry.getValue()); @@ -606,6 +604,7 @@ public static class Fields { static final String _SEQ_NO = "_seq_no"; static final String _PRIMARY_TERM = "_primary_term"; static final String _SCORE = "_score"; + static final String FIELDS = "fields"; static final String DOCUMENT_FIELDS = "document_fields"; static final String METADATA_FIELDS = "metadata_fields"; static final String HIGHLIGHT = "highlight"; @@ -676,19 +675,12 @@ public XContentBuilder toInnerXContent(XContentBuilder builder, Params params) t XContentHelper.writeRawField(SourceFieldMapper.NAME, source, builder, params); } if (!documentFields.isEmpty()) { - builder.startObject(Fields.DOCUMENT_FIELDS); + builder.startObject(Fields.FIELDS); for (DocumentField field : documentFields.values()) { field.toXContent(builder, params); } builder.endObject(); } - if (!metaFields.isEmpty()) { - builder.startObject(Fields.METADATA_FIELDS); - for (DocumentField field : metaFields.values()) { - field.toXContent(builder, params); - } - builder.endObject(); - } if (highlightFields != null && !highlightFields.isEmpty()) { builder.startObject(Fields.HIGHLIGHT); for (HighlightField field : highlightFields.values()) { @@ -758,15 +750,10 @@ public static void declareInnerHitsParseFields(ObjectParser, parser.declareObject((map, value) -> map.put(Fields.HIGHLIGHT, value), (p, c) -> parseHighlightFields(p), new ParseField(Fields.HIGHLIGHT)); parser.declareObject((map, value) -> { - Map fieldMap = get(Fields.METADATA_FIELDS, map, new HashMap()); - fieldMap.putAll(value); - map.put(Fields.METADATA_FIELDS, fieldMap); - }, (p, c) -> parseFields(p), new ParseField(Fields.METADATA_FIELDS)); - parser.declareObject((map, value) -> { - Map fieldMap = get(Fields.DOCUMENT_FIELDS, map, new HashMap()); + Map fieldMap = get(Fields.FIELDS, map, new HashMap()); fieldMap.putAll(value); map.put(Fields.DOCUMENT_FIELDS, fieldMap); - }, (p, c) -> parseFields(p), new ParseField(Fields.DOCUMENT_FIELDS)); + }, (p, c) -> parseFields(p), new ParseField(Fields.FIELDS)); parser.declareObject((map, value) -> map.put(Fields._EXPLANATION, value), (p, c) -> parseExplanation(p), new ParseField(Fields._EXPLANATION)); parser.declareObject((map, value) -> map.put(NestedIdentity._NESTED, value), NestedIdentity::fromXContent,