Skip to content

Commit e6c86a7

Browse files
committed
Ensure we don't return values for object fields.
1 parent 9583e1a commit e6c86a7

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

server/src/main/java/org/elasticsearch/search/fetch/subphase/FetchFieldsPhase.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ public void hitExecute(SearchContext context, HitContext hitContext) {
5353

5454
Set<String> fields = new HashSet<>();
5555
for (String fieldPattern : context.fetchFieldsContext().fields()) {
56+
if (documentMapper.objectMappers().containsKey(fieldPattern)) {
57+
continue;
58+
}
5659
Collection<String> concreteFields = context.mapperService().simpleMatchToFullName(fieldPattern);
5760
fields.addAll(concreteFields);
5861
}

server/src/test/java/org/elasticsearch/search/fetch/subphase/FetchFieldsPhaseTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,18 @@ public void testNonExistentFields() throws IOException {
157157
assertFalse(hitContext.hit().getFields().containsKey("non_existent"));
158158
}
159159

160+
public void testObjectFields() throws IOException {
161+
XContentBuilder source = XContentFactory.jsonBuilder().startObject()
162+
.array("field", "first", "second")
163+
.startObject("object")
164+
.field("field", "third")
165+
.endObject()
166+
.endObject();
167+
168+
FetchSubPhase.HitContext hitContext = hitExecute(indexService, source, "object");
169+
assertFalse(hitContext.hit().getFields().containsKey("object"));
170+
}
171+
160172
private FetchSubPhase.HitContext hitExecute(IndexService indexService, XContentBuilder source, String field) {
161173
return hitExecute(indexService, source, List.of(field));
162174
}

0 commit comments

Comments
 (0)