|
@@ -55,6 +55,7 @@ import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
|
+import java.util.Iterator;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
@@ -578,25 +579,24 @@ public final class SearchHit implements Writeable, ToXContentObject, RefCounted
|
|
if (lookupResults.isEmpty()) {
|
|
if (lookupResults.isEmpty()) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- final List<String> fields = new ArrayList<>(documentFields.keySet());
|
|
|
|
- for (String field : fields) {
|
|
|
|
- documentFields.computeIfPresent(field, (k, docField) -> {
|
|
|
|
- if (docField.getLookupFields().isEmpty()) {
|
|
|
|
- return docField;
|
|
|
|
- }
|
|
|
|
- final List<Object> newValues = new ArrayList<>(docField.getValues());
|
|
|
|
- for (LookupField lookupField : docField.getLookupFields()) {
|
|
|
|
- final List<Object> resolvedValues = lookupResults.get(lookupField);
|
|
|
|
- if (resolvedValues != null) {
|
|
|
|
- newValues.addAll(resolvedValues);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (newValues.isEmpty() && docField.getIgnoredValues().isEmpty()) {
|
|
|
|
- return null;
|
|
|
|
- } else {
|
|
|
|
- return new DocumentField(docField.getName(), newValues, docField.getIgnoredValues());
|
|
|
|
|
|
+ for (Iterator<Map.Entry<String, DocumentField>> iterator = documentFields.entrySet().iterator(); iterator.hasNext();) {
|
|
|
|
+ Map.Entry<String, DocumentField> entry = iterator.next();
|
|
|
|
+ final DocumentField docField = entry.getValue();
|
|
|
|
+ if (docField.getLookupFields().isEmpty()) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ final List<Object> newValues = new ArrayList<>(docField.getValues());
|
|
|
|
+ for (LookupField lookupField : docField.getLookupFields()) {
|
|
|
|
+ final List<Object> resolvedValues = lookupResults.get(lookupField);
|
|
|
|
+ if (resolvedValues != null) {
|
|
|
|
+ newValues.addAll(resolvedValues);
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+ }
|
|
|
|
+ if (newValues.isEmpty() && docField.getIgnoredValues().isEmpty()) {
|
|
|
|
+ iterator.remove();
|
|
|
|
+ } else {
|
|
|
|
+ entry.setValue(new DocumentField(docField.getName(), newValues, docField.getIgnoredValues()));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
assert hasLookupFields() == false : "Some lookup fields are not resolved";
|
|
assert hasLookupFields() == false : "Some lookup fields are not resolved";
|
|
}
|
|
}
|