aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-11-25 16:30:22 +0100
committerGitHub <noreply@github.com>2021-11-25 16:30:22 +0100
commit7b78dafa26c1942ea7c43e5f749f4ac0315b8628 (patch)
tree9429ab6227f573295cdf1fd72c46009558bf10c4 /config-model
parent718c216322ae29c0c27c163ec6e9982a7907814b (diff)
parent324380f910890dd4bb0b1ce850fbc13118423364 (diff)
Merge pull request #20215 from vespa-engine/arnej/utility-for-position-types
add utility for recognizing position type variants
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/ImportedFields.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ComplexAttributeFieldUtils.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/GeoPos.java26
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComplexAttributeFieldsValidator.java5
12 files changed, 48 insertions, 37 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 2890f1cc019..04ef85856cd 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
@@ -3,11 +3,11 @@ package com.yahoo.searchdefinition.derived;
import com.yahoo.config.subscription.ConfigInstanceUtil;
import com.yahoo.document.DataType;
-import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.Attribute;
import com.yahoo.searchdefinition.document.Case;
import com.yahoo.searchdefinition.document.Dictionary;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.Ranking;
import com.yahoo.searchdefinition.document.Sorting;
@@ -69,8 +69,7 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
private static boolean unsupportedFieldType(ImmutableSDField field) {
return (field.usesStructOrMap() &&
!isSupportedComplexField(field) &&
- !field.getDataType().equals(PositionDataType.INSTANCE) &&
- !field.getDataType().equals(DataType.getArray(PositionDataType.INSTANCE)));
+ !GeoPos.isAnyPos(field));
}
/** Returns an attribute by name, or null if it doesn't exist */
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/ImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/ImportedFields.java
index a63b88f9445..3b8c0a9cff2 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/ImportedFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/ImportedFields.java
@@ -2,9 +2,9 @@
package com.yahoo.searchdefinition.derived;
import com.yahoo.document.DataType;
-import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.ImportedComplexField;
import com.yahoo.searchdefinition.document.ImportedField;
@@ -60,9 +60,8 @@ public class ImportedFields extends Derived implements ImportedFieldsConfig.Prod
private static void considerComplexField(ImportedFieldsConfig.Builder builder, ImportedComplexField field) {
ImmutableSDField targetField = field.targetField();
- if (targetField.getDataType().equals(PositionDataType.INSTANCE) ||
- targetField.getDataType().equals(DataType.getArray(PositionDataType.INSTANCE))) {
-
+ if (GeoPos.isAnyPos(targetField)) {
+ // no action needed
} else if (isArrayOfSimpleStruct(targetField)) {
considerNestedFields(builder, field);
} else if (isMapOfSimpleStruct(targetField)) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java
index 879ad570c26..495c3da5d3a 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java
@@ -6,7 +6,6 @@ import com.yahoo.document.DataType;
import com.yahoo.document.Field;
import com.yahoo.document.MapDataType;
import com.yahoo.document.NumericDataType;
-import com.yahoo.document.PositionDataType;
import com.yahoo.document.PrimitiveDataType;
import com.yahoo.document.StructuredDataType;
import com.yahoo.searchdefinition.Index;
@@ -15,6 +14,7 @@ import com.yahoo.searchdefinition.document.Attribute;
import com.yahoo.searchdefinition.document.BooleanIndexDefinition;
import com.yahoo.searchdefinition.document.Case;
import com.yahoo.searchdefinition.document.FieldSet;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.Matching;
import com.yahoo.searchdefinition.document.Stemming;
@@ -91,12 +91,8 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer {
}
}
- private static boolean isPositionArrayField(ImmutableSDField field) {
- return field.getDataType().equals(DataType.getArray(PositionDataType.INSTANCE));
- }
-
private static boolean isPositionField(ImmutableSDField field) {
- return field.getDataType().equals(PositionDataType.INSTANCE) || isPositionArrayField(field);
+ return GeoPos.isAnyPos(field);
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java
index cabe8d001bd..23409729dbb 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java
@@ -2,8 +2,8 @@
package com.yahoo.searchdefinition.derived;
import com.yahoo.document.DataType;
-import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Schema;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.configdefinition.IlscriptsConfig.Ilscript.Builder;
@@ -58,9 +58,7 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro
if (field.hasFullIndexingDocprocRights())
docFields.add(field.getName());
- if (field.usesStructOrMap() &&
- ! field.getDataType().equals(PositionDataType.INSTANCE) &&
- ! field.getDataType().equals(DataType.getArray(PositionDataType.INSTANCE))) {
+ if (field.usesStructOrMap() && ! GeoPos.isAnyPos(field)) {
return; // unsupported
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java
index 4ce486e13ba..03b9e795317 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java
@@ -1,8 +1,8 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchdefinition.derived;
-import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Schema;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.SDDocumentType;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.vespa.documentmodel.DocumentSummary;
@@ -37,7 +37,7 @@ public class VsmSummary extends Derived implements VsmsummaryConfig.Producer {
if (doMapField(schema, summaryField)) {
SDField sdField = schema.getConcreteField(summaryField.getName());
- if (sdField != null && PositionDataType.INSTANCE.equals(sdField.getDataType())) {
+ if (sdField != null && GeoPos.isPos(sdField)) {
summaryMap.put(summaryField, Collections.singletonList(summaryField.getName()));
} else {
summaryMap.put(summaryField, from);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ComplexAttributeFieldUtils.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ComplexAttributeFieldUtils.java
index 24a40154494..feac6b9618e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ComplexAttributeFieldUtils.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ComplexAttributeFieldUtils.java
@@ -59,8 +59,7 @@ public class ComplexAttributeFieldUtils {
}
private static boolean isStructWithPrimitiveStructFieldAttributes(DataType type, ImmutableSDField field) {
- if (type instanceof StructDataType &&
- !(type.equals(PositionDataType.INSTANCE))) {
+ if (type instanceof StructDataType && ! GeoPos.isPos(type)) {
for (ImmutableSDField structField : field.getStructFields()) {
Attribute attribute = structField.getAttributes().get(structField.getName());
if (attribute != null) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/GeoPos.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/GeoPos.java
new file mode 100644
index 00000000000..956d63a1cdf
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/GeoPos.java
@@ -0,0 +1,26 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.document;
+
+import com.yahoo.document.DataType;
+import com.yahoo.document.PositionDataType;
+
+/**
+ * Common utilities for recognizing fields with the built-in "position" datatype,
+ * possibly in array form.
+ * @author arnej
+ */
+public class GeoPos {
+ static public boolean isPos(DataType type) {
+ return PositionDataType.INSTANCE.equals(type);
+ }
+ static public boolean isPosArray(DataType type) {
+ return DataType.getArray(PositionDataType.INSTANCE).equals(type);
+ }
+ static public boolean isAnyPos(DataType type) {
+ return isPos(type) || isPosArray(type);
+ }
+
+ static public boolean isPos(ImmutableSDField field) { return isPos(field.getDataType()); }
+ static public boolean isPosArray(ImmutableSDField field) { return isPosArray(field.getDataType()); }
+ static public boolean isAnyPos(ImmutableSDField field) { return isAnyPos(field.getDataType()); }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java
index 983942f87c3..766b6ed3fec 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java
@@ -8,6 +8,7 @@ import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.vespa.documentmodel.DocumentSummary;
import com.yahoo.vespa.documentmodel.SummaryField;
@@ -34,7 +35,7 @@ public class AdjustPositionSummaryFields extends Processor {
private void scanSummary(DocumentSummary summary) {
for (SummaryField summaryField : summary.getSummaryFields().values()) {
- if ( ! isPositionDataType(summaryField.getDataType())) continue;
+ if ( ! GeoPos.isAnyPos(summaryField.getDataType())) continue;
String originalSource = summaryField.getSingleSource();
if (originalSource.indexOf('.') == -1) { // Eliminate summary fields with pos.x or pos.y as source
@@ -112,10 +113,6 @@ public class AdjustPositionSummaryFields extends Processor {
return name.length() > suffix.length() && name.substring(name.length() - suffix.length()).equals(suffix);
}
- private static boolean isPositionDataType(DataType dataType) {
- return dataType.equals(PositionDataType.INSTANCE) || dataType.equals(DataType.getArray(PositionDataType.INSTANCE));
- }
-
private static DataType makeZCurveDataType(DataType dataType) {
return dataType instanceof ArrayDataType ? DataType.getArray(DataType.LONG) : DataType.LONG;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
index 699abb1e792..f5c1d8d8197 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
@@ -8,6 +8,7 @@ import com.yahoo.document.DataType;
import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.documentmodel.SummaryTransform;
@@ -142,10 +143,7 @@ public class CreatePositionZCurve extends Processor {
}
private static boolean isSupportedPositionType(DataType dataType) {
- if (dataType instanceof ArrayDataType) {
- dataType = ((ArrayDataType)dataType).getNestedType();
- }
- return dataType.equals(PositionDataType.INSTANCE);
+ return GeoPos.isAnyPos(dataType);
}
private static class RemoveSummary extends ExpressionConverter {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
index f8a28061897..e836caac10d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java
@@ -9,6 +9,7 @@ import com.yahoo.searchdefinition.DocumentReferences;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.ImportedComplexField;
import com.yahoo.searchdefinition.document.ImportedField;
@@ -49,8 +50,7 @@ public class ImportedFieldsResolver extends Processor {
private void resolveImportedField(TemporaryImportedField importedField, boolean validate) {
DocumentReference reference = validateDocumentReference(importedField);
ImmutableSDField targetField = getTargetField(importedField, reference);
- if (targetField.getDataType().equals(PositionDataType.INSTANCE) ||
- targetField.getDataType().equals(DataType.getArray(PositionDataType.INSTANCE))) {
+ if (GeoPos.isAnyPos(targetField)) {
resolveImportedPositionField(importedField, reference, targetField, validate);
} else if (isArrayOfSimpleStruct(targetField)) {
resolveImportedArrayOfStructField(importedField, reference, targetField, validate);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java
index eb9b561da73..242f5dab308 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java
@@ -5,11 +5,11 @@ import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.document.ArrayDataType;
import com.yahoo.document.DataType;
import com.yahoo.document.MapDataType;
-import com.yahoo.document.PositionDataType;
import com.yahoo.document.WeightedSetDataType;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.SDField;
import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.indexinglanguage.ExpressionConverter;
@@ -153,7 +153,7 @@ public class IndexingValidation extends Processor {
createCompatType(mapType.getValueType()));
} else if (origType instanceof WeightedSetDataType) {
return DataType.getWeightedSet(createCompatType(((WeightedSetDataType)origType).getNestedType()));
- } else if (origType == PositionDataType.INSTANCE) {
+ } else if (GeoPos.isPos(origType)) {
return DataType.LONG;
} else {
return origType;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComplexAttributeFieldsValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComplexAttributeFieldsValidator.java
index 43bf8133c74..e2b08a621d1 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComplexAttributeFieldsValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComplexAttributeFieldsValidator.java
@@ -3,9 +3,9 @@ package com.yahoo.vespa.model.application.validation;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.document.DataType;
-import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Schema;
import com.yahoo.searchdefinition.document.ComplexAttributeFieldUtils;
+import com.yahoo.searchdefinition.document.GeoPos;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.search.AbstractSearchCluster;
@@ -62,8 +62,7 @@ public class ComplexAttributeFieldsValidator extends Validator {
private static boolean isSupportedComplexField(ImmutableSDField field) {
return (ComplexAttributeFieldUtils.isSupportedComplexField(field) ||
- field.getDataType().equals(PositionDataType.INSTANCE) ||
- field.getDataType().equals(DataType.getArray(PositionDataType.INSTANCE)));
+ GeoPos.isAnyPos(field));
}
private static String toString(ImmutableSDField field) {