Skip to content

Commit b549efc

Browse files
gather all fields and iterate to process for fieldcaps api
1 parent 25f8bca commit b549efc

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

server/src/main/java/org/elasticsearch/action/fieldcaps/FieldCapabilitiesFetcher.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
import org.elasticsearch.core.Nullable;
1515
import org.elasticsearch.index.IndexService;
1616
import org.elasticsearch.index.engine.Engine;
17+
import org.elasticsearch.index.mapper.FieldMapper;
1718
import org.elasticsearch.index.mapper.MappedFieldType;
19+
import org.elasticsearch.index.mapper.RootObjectMapper;
1820
import org.elasticsearch.index.mapper.RuntimeField;
1921
import org.elasticsearch.index.query.MatchAllQueryBuilder;
2022
import org.elasticsearch.index.query.QueryBuilder;
@@ -30,8 +32,10 @@
3032
import org.elasticsearch.tasks.CancellableTask;
3133

3234
import java.io.IOException;
35+
import java.util.ArrayList;
3336
import java.util.Collections;
3437
import java.util.HashMap;
38+
import java.util.List;
3539
import java.util.Map;
3640
import java.util.Set;
3741
import java.util.function.Predicate;
@@ -165,16 +169,21 @@ static Map<String, IndexFieldCapabilities> retrieveFieldCaps(
165169
var fieldInfos = indexShard.getFieldInfos();
166170
includeEmptyFields = includeEmptyFields || enableFieldHasValue == false;
167171
Map<String, IndexFieldCapabilities> responseMap = new HashMap<>();
168-
for (Map.Entry<String, MappedFieldType> entry : context.getAllFields()) {
169-
final String field = entry.getKey();
172+
173+
RootObjectMapper rootObjectMapper = context.getMappingLookup().getMapping().getRoot();
174+
List<FieldMapper> allMappers = new ArrayList<>();
175+
allMappers.addAll(rootObjectMapper.getSourceFields());
176+
allMappers.addAll(context.getMetadataFields());
177+
178+
for (FieldMapper mapper : allMappers) {
179+
final String field = mapper.fullPath();
170180
if (fieldNameFilter.test(field) == false) {
171181
continue;
172182
}
173-
MappedFieldType ft = entry.getValue();
183+
MappedFieldType ft = mapper.fieldType();
174184
if ((includeEmptyFields || ft.fieldHasValue(fieldInfos))
175185
&& (fieldPredicate.test(ft.name()) || context.isMetadataField(ft.name()))
176-
&& (filter == null || filter.test(ft))
177-
&& ft.excludeFromFieldCaps() == false) {
186+
&& (filter == null || filter.test(ft))) {
178187
IndexFieldCapabilities fieldCap = new IndexFieldCapabilities(
179188
field,
180189
ft.familyTypeName(),

0 commit comments

Comments
 (0)