summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java49
1 files changed, 33 insertions, 16 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
index 9cbb4479778..1775c69f669 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
@@ -29,6 +29,7 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
public enum FieldSet {ALL, FAST_ACCESS}
private Map<String, Attribute> attributes = new java.util.LinkedHashMap<>();
+ private Map<String, Attribute> importedAttributes = new java.util.LinkedHashMap<>();
/**
* Flag indicating if a position-attribute has been found
@@ -51,9 +52,10 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
return; // Ignore struct fields for indexed search (only implemented for streaming search)
}
if (field.isImportedField()) {
- return; // Ignore imported fields
+ deriveImportedAttributes(field);
+ } else {
+ deriveAttributes(field);
}
- deriveAttributes(field);
}
/**
@@ -67,18 +69,6 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
return getAttribute(attributeName) != null;
}
- private void deriveAttribute(ImmutableSDField field, Attribute fieldAttribute) {
- Attribute attribute = getAttribute(fieldAttribute.getName());
- if (attribute == null) {
- attributes.put(fieldAttribute.getName(), fieldAttribute);
- attribute = getAttribute(fieldAttribute.getName());
- }
- Ranking ranking = field.getRanking();
- if (ranking != null && ranking.isFilter()) {
- attribute.setEnableBitVectors(true);
- attribute.setEnableOnlyBitVector(true);
- }
- }
/**
* Derives one attribute. TODO: Support non-default named attributes
*/
@@ -96,6 +86,27 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
}
}
+ private void deriveAttribute(ImmutableSDField field, Attribute fieldAttribute) {
+ Attribute attribute = getAttribute(fieldAttribute.getName());
+ if (attribute == null) {
+ attributes.put(fieldAttribute.getName(), fieldAttribute);
+ attribute = getAttribute(fieldAttribute.getName());
+ }
+ Ranking ranking = field.getRanking();
+ if (ranking != null && ranking.isFilter()) {
+ attribute.setEnableBitVectors(true);
+ attribute.setEnableOnlyBitVector(true);
+ }
+ }
+
+ private void deriveImportedAttributes(ImmutableSDField field) {
+ for (Attribute attribute : field.getAttributes().values()) {
+ if (!importedAttributes.containsKey(field.getName())) {
+ importedAttributes.put(field.getName(), attribute);
+ }
+ }
+ }
+
/**
* Returns a read only attribute iterator
*/
@@ -133,7 +144,7 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
return (fs == FieldSet.ALL) || ((fs == FieldSet.FAST_ACCESS) && attribute.isFastAccess());
}
- private AttributesConfig.Attribute.Builder getConfig(Attribute attribute) {
+ private AttributesConfig.Attribute.Builder getConfig(Attribute attribute, boolean imported) {
AttributesConfig.Attribute.Builder aaB = new AttributesConfig.Attribute.Builder()
.name(attribute.getName())
.datatype(AttributesConfig.Attribute.Datatype.Enum.valueOf(attribute.getType().getExportAttributeTypeName()))
@@ -174,13 +185,19 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
if (attribute.tensorType().isPresent()) {
aaB.tensortype(attribute.tensorType().get().toString());
}
+ aaB.imported(imported);
return aaB;
}
public void getConfig(AttributesConfig.Builder builder, FieldSet fs) {
for (Attribute attribute : attributes.values()) {
if (isAttributeInFieldSet(attribute, fs)) {
- builder.attribute(getConfig(attribute));
+ builder.attribute(getConfig(attribute, false));
+ }
+ }
+ if (fs == FieldSet.ALL) {
+ for (Attribute attribute : importedAttributes.values()) {
+ builder.attribute(getConfig(attribute, true));
}
}
}