aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorJon Bratseth <jonbratseth@yahoo.com>2017-01-17 14:16:32 +0100
committerGitHub <noreply@github.com>2017-01-17 14:16:32 +0100
commit7c136a06e1a792a1147417db02d7999290bb945a (patch)
tree23c65a0422bf1499f9f8dfb6f0b50c4859498d5c /config-model/src
parentae39567b503c746f68e04ba5b7a1aa64467fdd29 (diff)
Revert "Revert "Revert "Revert "Bratseth/tensor type info in documents""""
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/DataTypeCollection.java8
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java8
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/DocumentTypeRepo.java2
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java5
-rw-r--r--config-model/src/main/java/com/yahoo/documentmodel/VespaDocumentType.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/Attribute.java59
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperation.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingValidation.java9
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java15
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java20
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java109
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java90
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidator.java38
-rw-r--r--config-model/src/main/javacc/SDParser.jj3
-rw-r--r--config-model/src/test/cfg/application/validation/search_alltypes/searchdefinitions/simple.sd2
-rw-r--r--config-model/src/test/configmodel/types/documentmanager.cfg44
-rw-r--r--config-model/src/test/configmodel/types/documenttypes.cfg42
-rw-r--r--config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg7
-rw-r--r--config-model/src/test/derived/advanced/documentmanager.cfg22
-rw-r--r--config-model/src/test/derived/advanced/index-info.cfg28
-rwxr-xr-xconfig-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg5
-rwxr-xr-xconfig-model/src/test/derived/annotationsinheritance/documentmanager.cfg10
-rwxr-xr-xconfig-model/src/test/derived/annotationsinheritance2/documentmanager.cfg6
-rwxr-xr-xconfig-model/src/test/derived/annotationspolymorphy/documentmanager.cfg5
-rwxr-xr-xconfig-model/src/test/derived/annotationsreference/documentmanager.cfg8
-rwxr-xr-xconfig-model/src/test/derived/annotationssimple/documentmanager.cfg4
-rw-r--r--config-model/src/test/derived/annotationsstruct/documentmanager.cfg6
-rw-r--r--config-model/src/test/derived/annotationsstructarray/documentmanager.cfg6
-rw-r--r--config-model/src/test/derived/arrays/documentmanager.cfg9
-rw-r--r--config-model/src/test/derived/arrays/index-info.cfg126
-rw-r--r--config-model/src/test/derived/attributeprefetch/documentmanager.cfg22
-rw-r--r--config-model/src/test/derived/complex/documentmanager.cfg29
-rw-r--r--config-model/src/test/derived/complex/rank-profiles.cfg2
-rw-r--r--config-model/src/test/derived/documentderiver/documentmanager.cfg75
-rw-r--r--config-model/src/test/derived/emptydefault/documentmanager.cfg6
-rw-r--r--config-model/src/test/derived/id/documentmanager.cfg5
-rw-r--r--config-model/src/test/derived/indexswitches/documentmanager.cfg8
-rw-r--r--config-model/src/test/derived/indexswitches/index-info.cfg60
-rw-r--r--config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg6
-rw-r--r--config-model/src/test/derived/inheritfromparent/documentmanager.cfg8
-rw-r--r--config-model/src/test/derived/inheritfromparent/documenttypes.cfg6
-rw-r--r--config-model/src/test/derived/mail/onlydoc/documentmanager.cfg18
-rw-r--r--config-model/src/test/derived/prefixexactattribute/documentmanager.cfg9
-rw-r--r--config-model/src/test/derived/ranktypes/documentmanager.cfg9
-rw-r--r--config-model/src/test/derived/streamingstruct/documentmanager.cfg31
-rw-r--r--config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg26
-rwxr-xr-xconfig-model/src/test/derived/structanyorder/documentmanager.cfg13
-rw-r--r--config-model/src/test/derived/tensor/attributes.cfg4
-rw-r--r--config-model/src/test/derived/tensor/documenttypes.cfg6
-rw-r--r--config-model/src/test/derived/tensor/rank-profiles.cfg18
-rw-r--r--config-model/src/test/derived/tensor/tensor.sd8
-rw-r--r--config-model/src/test/derived/types/attributes.cfg2
-rw-r--r--config-model/src/test/derived/types/documentmanager.cfg41
-rw-r--r--config-model/src/test/derived/types/ilscripts.cfg2
-rw-r--r--config-model/src/test/derived/types/index-info.cfg2
-rw-r--r--config-model/src/test/derived/types/summary.cfg2
-rw-r--r--config-model/src/test/derived/types/summarymap.cfg2
-rw-r--r--config-model/src/test/examples/fieldoftypedocument.cfg10
-rwxr-xr-xconfig-model/src/test/examples/structresult.cfg10
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/FieldOfTypeDocumentTestCase.java5
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java12
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java8
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java14
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java8
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidatorTestCase.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java25
67 files changed, 892 insertions, 326 deletions
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/DataTypeCollection.java b/config-model/src/main/java/com/yahoo/documentmodel/DataTypeCollection.java
index 9c507d7be05..ff1a582d7fa 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/DataTypeCollection.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/DataTypeCollection.java
@@ -9,7 +9,9 @@ import java.util.Collection;
* @author baldersheim
*/
public interface DataTypeCollection {
- public DataType getDataType(String name);
- public DataType getDataType(int id);
- public Collection<DataType> getTypes();
+
+ DataType getDataType(String name);
+ DataType getDataType(int id);
+ Collection<DataType> getTypes();
+
}
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java b/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
index 73f8d7f91c5..2c527201ce4 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/DataTypeRepo.java
@@ -11,6 +11,7 @@ import java.util.Map;
* @author baldersheim
*/
public class DataTypeRepo implements DataTypeCollection {
+
Map<Integer, DataType> typeById = new LinkedHashMap<>();
Map<String, DataType> typeByName = new LinkedHashMap<>();
@@ -25,10 +26,9 @@ public class DataTypeRepo implements DataTypeCollection {
public Collection<DataType> getTypes() { return typeById.values(); }
public DataTypeRepo add(DataType type) {
- if (typeByName.containsKey(type.getName()) ||
- typeById.containsKey(type.getId()))
- {
- throw new IllegalStateException("Data type '" + type.getName() + "', id '" + type.getId() + "' is already registered.");
+ if (typeByName.containsKey(type.getName()) || typeById.containsKey(type.getId())) {
+ throw new IllegalStateException("Data type '" + type.getName() + "', id '" +
+ type.getId() + "' is already registered.");
}
typeByName.put(type.getName(), type);
typeById.put(type.getId(), type);
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/DocumentTypeRepo.java b/config-model/src/main/java/com/yahoo/documentmodel/DocumentTypeRepo.java
index b71a400666a..1abbf8b3ae1 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/DocumentTypeRepo.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/DocumentTypeRepo.java
@@ -9,6 +9,7 @@ import java.util.Map;
* @author baldersheim
*/
public class DocumentTypeRepo implements DocumentTypeCollection {
+
final Map<Integer, NewDocumentType> typeById = new LinkedHashMap<>();
final Map<NewDocumentType.Name, NewDocumentType> typeByName = new LinkedHashMap<>();
@@ -36,4 +37,5 @@ public class DocumentTypeRepo implements DocumentTypeCollection {
typeById.put(type.getFullName().getId(), type);
return this;
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java
index ccf9bdec302..7c594a4e836 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/NewDocumentType.java
@@ -13,15 +13,10 @@ import com.yahoo.searchdefinition.processing.BuiltInFieldSets;
import java.util.*;
/**
- * TODO: What is this and why?
- *
* @author baldersheim
*/
public final class NewDocumentType extends StructuredDataType implements DataTypeCollection {
- /**
- * TODO: What is this and why?
- */
public static final class Name {
// TODO: privatize
diff --git a/config-model/src/main/java/com/yahoo/documentmodel/VespaDocumentType.java b/config-model/src/main/java/com/yahoo/documentmodel/VespaDocumentType.java
index 793a5fcff6c..09aa55f776b 100644
--- a/config-model/src/main/java/com/yahoo/documentmodel/VespaDocumentType.java
+++ b/config-model/src/main/java/com/yahoo/documentmodel/VespaDocumentType.java
@@ -32,7 +32,6 @@ public class VespaDocumentType {
vespa.add(PositionDataType.INSTANCE);
vespa.add(DataType.URI);
vespa.add(DataType.PREDICATE);
- vespa.add(DataType.TENSOR);
return vespa;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java b/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java
index 7d8a87cee8c..2a723596255 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/SDDocumentTypeOrderer.java
@@ -11,9 +11,10 @@ import java.util.*;
import java.util.logging.Level;
/**
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public class SDDocumentTypeOrderer {
+
private Map<DataTypeName, SDDocumentType> createdSDTypes = new LinkedHashMap<>();
private Set<Integer> seenTypes = new LinkedHashSet<>();
List<SDDocumentType> processingOrder = new LinkedList<>();
@@ -119,6 +120,8 @@ public class SDDocumentTypeOrderer {
//do nothing
} else if (type instanceof PrimitiveDataType) {
//do nothing
+ } else if (type instanceof TensorDataType) {
+ //do nothing
} else {
deployLogger.log(Level.WARNING, "Unknown type : " + type);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/Attribute.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/Attribute.java
index 950ec791368..bc52aa27f4c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/Attribute.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/Attribute.java
@@ -25,10 +25,6 @@ public final class Attribute implements Cloneable, Serializable {
private Type type;
private CollectionType collectionType;
- /** True if only the enum information should be read from this attribute
- * (i.e. the actual values are not relevant, only which documents have the
- * same values) Used for collapsing and unique.
- */
private boolean removeIfZero = false;
private boolean createIfNonExistent = false;
private boolean enableBitVectors = false;
@@ -41,6 +37,8 @@ public final class Attribute implements Cloneable, Serializable {
private long lowerBound = BooleanIndexDefinition.DEFAULT_LOWER_BOUND;
private long upperBound = BooleanIndexDefinition.DEFAULT_UPPER_BOUND;
private double densePostingListThreshold = BooleanIndexDefinition.DEFAULT_DENSE_POSTING_LIST_THRESHOLD;
+
+ /** This is set if the type of this is TENSOR */
private Optional<TensorType> tensorType = Optional.empty();
private boolean isPosition = false;
@@ -104,16 +102,21 @@ public final class Attribute implements Cloneable, Serializable {
}
/** Creates an attribute with default settings */
- public Attribute(String name,DataType fieldType) {
- this(name,convertDataType(fieldType), convertCollectionType(fieldType));
+ public Attribute(String name, DataType fieldType) {
+ this(name, convertDataType(fieldType), convertCollectionType(fieldType), convertTensorType(fieldType));
setRemoveIfZero(fieldType instanceof WeightedSetDataType ? ((WeightedSetDataType)fieldType).removeIfZero() : false);
setCreateIfNonExistent(fieldType instanceof WeightedSetDataType ? ((WeightedSetDataType)fieldType).createIfNonExistent() : false);
}
- public Attribute(String name,Type type, CollectionType collectionType) {
+ public Attribute(String name, Type type, CollectionType collectionType) {
+ this(name, type, collectionType, Optional.empty());
+ }
+
+ public Attribute(String name, Type type, CollectionType collectionType, Optional<TensorType> tensorType) {
this.name=name;
setType(type);
setCollectionType(collectionType);
+ this.tensorType = tensorType;
}
/**
@@ -211,44 +214,42 @@ public final class Attribute implements Cloneable, Serializable {
}
/** Converts to the right attribute type from a field datatype */
- public static CollectionType convertCollectionType(DataType fieldType) {
+ private static CollectionType convertCollectionType(DataType fieldType) {
if (fieldType instanceof ArrayDataType) {
return CollectionType.ARRAY;
} else if (fieldType instanceof WeightedSetDataType) {
return CollectionType.WEIGHTEDSET;
+ } else if (fieldType instanceof TensorDataType) {
+ return CollectionType.SINGLE;
} else if (fieldType instanceof PrimitiveDataType) {
return CollectionType.SINGLE;
} else {
throw new IllegalArgumentException("Field " + fieldType + " not supported in convertCollectionType");
}
}
+
+ private static Optional<TensorType> convertTensorType(DataType fieldType) {
+ if ( ! ( fieldType instanceof TensorDataType)) return Optional.empty();
+ return Optional.of(((TensorDataType)fieldType).getTensorType());
+ }
/** Converts to the right field type from an attribute type */
- public static DataType convertAttrType(Type attrType) {
- if (attrType== Type.STRING) {
- return DataType.STRING;
- } else if (attrType== Type.INTEGER) {
- return DataType.INT;
- } else if (attrType== Type.LONG) {
- return DataType.LONG;
- } else if (attrType== Type.FLOAT) {
- return DataType.FLOAT;
- } else if (attrType== Type.DOUBLE) {
- return DataType.DOUBLE;
- } else if (attrType == Type.BYTE) {
- return DataType.BYTE;
- } else if (attrType == Type.PREDICATE) {
- return DataType.PREDICATE;
- } else if (attrType == Type.TENSOR) {
- return DataType.TENSOR;
- } else {
- throw new IllegalArgumentException("Don't know which attribute type to " +
- "convert " + attrType + " to");
+ private DataType toDataType(Type attributeType) {
+ switch (attributeType) {
+ case STRING : return DataType.STRING;
+ case INTEGER: return DataType.INT;
+ case LONG: return DataType.LONG;
+ case FLOAT: return DataType.FLOAT;
+ case DOUBLE: return DataType.DOUBLE;
+ case BYTE: return DataType.BYTE;
+ case PREDICATE: return DataType.PREDICATE;
+ case TENSOR: return DataType.getTensor(tensorType.orElseThrow(IllegalStateException::new));
+ default: throw new IllegalArgumentException("Unknown attribute type " + attributeType);
}
}
public DataType getDataType() {
- DataType dataType = Attribute.convertAttrType(type);
+ DataType dataType = toDataType(type);
if (collectionType.equals(Attribute.CollectionType.ARRAY)) {
return DataType.getArray(dataType);
} else if (collectionType.equals(Attribute.CollectionType.WEIGHTEDSET)) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperation.java
index 3b28f380b2d..78f0d9a2997 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperation.java
@@ -11,6 +11,7 @@ import com.yahoo.searchdefinition.document.SDField;
*/
public interface FieldOperation extends Comparable<FieldOperation> {
+ /** Apply this operation on the given field */
void apply(SDField field);
@Override
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 af04deb5347..d8b95391ecb 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
@@ -16,7 +16,7 @@ import java.util.HashSet;
import java.util.Set;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public class IndexingValidation extends Processor {
@@ -26,11 +26,11 @@ public class IndexingValidation extends Processor {
@Override
public void process() {
- VerificationContext ctx = new VerificationContext(new MyAdapter(search));
+ VerificationContext context = new VerificationContext(new MyAdapter(search));
for (SDField field : search.allFieldsList()) {
ScriptExpression script = field.getIndexingScript();
try {
- script.verify(ctx);
+ script.verify(context);
MyConverter converter = new MyConverter();
for (StatementExpression exp : script) {
converter.convert(exp); // TODO: stop doing this explicitly when visiting a script does not branch
@@ -123,8 +123,7 @@ public class IndexingValidation extends Processor {
throw new UnsupportedOperationException();
}
if (!fieldType.isAssignableFrom(valueType) &&
- !fieldType.isAssignableFrom(createCompatType(valueType)))
- {
+ !fieldType.isAssignableFrom(createCompatType(valueType))) {
throw new VerificationException(exp, "Can not assign " + valueType.getName() + " to " + fieldDesc +
" '" + fieldName + "' which is " + fieldType.getName() + ".");
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
index ae16f6cfed8..36cf302477e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
@@ -2,7 +2,9 @@
package com.yahoo.searchdefinition.processing;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.document.CollectionDataType;
import com.yahoo.document.DataType;
+import com.yahoo.document.TensorDataType;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
import com.yahoo.searchdefinition.document.Attribute;
@@ -23,12 +25,13 @@ public class TensorFieldProcessor extends Processor {
@Override
public void process() {
for (SDField field : search.allFieldsList()) {
- if (field.getDataType() == DataType.TENSOR) {
+ if ( field.getDataType() instanceof TensorDataType ) {
warnUseOfTensorFieldAsAttribute(field);
validateIndexingScripsForTensorField(field);
validateAttributeSettingForTensorField(field);
- } else {
- validateDataTypeForField(field);
+ }
+ else if (field.getDataType() instanceof CollectionDataType){
+ validateDataTypeForCollectionField(field);
}
}
}
@@ -55,9 +58,9 @@ public class TensorFieldProcessor extends Processor {
}
}
- private void validateDataTypeForField(SDField field) {
- if (field.getDataType().getPrimitiveType() == DataType.TENSOR) {
+ private void validateDataTypeForCollectionField(SDField field) {
+ if (((CollectionDataType)field.getDataType()).getNestedType() instanceof TensorDataType)
fail(search, field, "A field with collection type of tensor is not supported. Use simple type 'tensor' instead.");
- }
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
index 1349abc3795..9ee5f48a906 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java
@@ -2,6 +2,7 @@
package com.yahoo.searchdefinition.processing;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.document.TensorDataType;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.document.Attribute;
import com.yahoo.document.DataType;
@@ -49,22 +50,25 @@ public class ValidateFieldTypes extends Processor {
DataType seenType = seenFields.get(fieldName);
if (seenType == null) {
seenFields.put(fieldName, fieldType);
- } else if ( ! equalTypes(seenType, fieldType)) {
- throw newProcessException(searchName, fieldName, "Duplicate field name with different types. Expected " +
+ } else if ( ! compatibleTypes(seenType, fieldType)) {
+ throw newProcessException(searchName, fieldName, "Incompatible types. Expected " +
seenType.getName() + " for " + fieldDesc +
" '" + fieldName + "', got " + fieldType.getName() + ".");
}
}
- private boolean equalTypes(DataType d1, DataType d2) {
+ private boolean compatibleTypes(DataType seenType, DataType fieldType) {
// legacy tag field type compatibility; probably not needed any more (Oct 2016)
- if ("tag".equals(d1.getName())) {
- return "tag".equals(d2.getName()) || "WeightedSet<string>".equals(d2.getName());
+ if ("tag".equals(seenType.getName())) {
+ return "tag".equals(fieldType.getName()) || "WeightedSet<string>".equals(fieldType.getName());
}
- if ("tag".equals(d2.getName())) {
- return "tag".equals(d1.getName()) || "WeightedSet<string>".equals(d1.getName());
+ if ("tag".equals(fieldType.getName())) {
+ return "tag".equals(seenType.getName()) || "WeightedSet<string>".equals(seenType.getName());
}
- return d1.equals(d2);
+ if (seenType instanceof TensorDataType && fieldType instanceof TensorDataType) {
+ return fieldType.isAssignableFrom(seenType); // TODO: Just do this for all types
+ }
+ return seenType.equals(fieldType);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java
index 3cdcf55b34e..705ec4dc4a1 100644
--- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java
+++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java
@@ -17,39 +17,39 @@ import java.util.Set;
/**
* @author baldersheim
- * @since 2010-02-19
*/
public class DocumentManager {
- public DocumentmanagerConfig.Builder produce(DocumentModel model, DocumentmanagerConfig.Builder docman) {
- docman.enablecompression(false);
+ public DocumentmanagerConfig.Builder produce(DocumentModel model,
+ DocumentmanagerConfig.Builder documentConfigBuilder) {
+ documentConfigBuilder.enablecompression(false);
Set<DataType> handled = new HashSet<>();
for(NewDocumentType documentType : model.getDocumentManager().getTypes()) {
- handle(documentType, docman, handled);
- handleAnnotations(documentType.getAnnotations(), docman);
+ buildConfig(documentType, documentConfigBuilder, handled);
+ buildConfig(documentType.getAnnotations(), documentConfigBuilder);
if ( documentType != VespaDocumentType.INSTANCE) {
- DocumentmanagerConfig.Datatype.Builder dt = new DocumentmanagerConfig.Datatype.Builder();
- docman.datatype(dt);
- handleDataType(documentType, dt);
+ DocumentmanagerConfig.Datatype.Builder dataTypeBuilder = new DocumentmanagerConfig.Datatype.Builder();
+ documentConfigBuilder.datatype(dataTypeBuilder);
+ buildConfig(documentType, dataTypeBuilder);
}
}
- return docman;
+ return documentConfigBuilder;
}
- private void handle(DataTypeCollection type, DocumentmanagerConfig.Builder docman, Set<DataType> handled) {
+ private void buildConfig(DataTypeCollection type, DocumentmanagerConfig.Builder documentConfigBuilder, Set<DataType> built) {
for (DataType dataType : type.getTypes()) {
- if (handled.contains(dataType)) continue;
- handled.add(dataType);
+ if (built.contains(dataType)) continue;
+ built.add(dataType);
if (dataType instanceof TemporaryStructuredDataType) continue;
- if ((dataType.getId() < 0) || (DataType.lastPredefinedDataTypeId() < dataType.getId())) {
- Datatype.Builder dtc = new Datatype.Builder();
- docman.datatype(dtc);
- handleDataType(dataType, dtc);
+ if ((dataType.getId() < 0) || (dataType.getId()> DataType.lastPredefinedDataTypeId())) {
+ Datatype.Builder dataTypeBuilder = new Datatype.Builder();
+ documentConfigBuilder.datatype(dataTypeBuilder);
+ buildConfig(dataType, dataTypeBuilder);
}
}
}
- private void handleAnnotation(AnnotationType type, DocumentmanagerConfig.Annotationtype.Builder atb) {
+ private void buildConfig(AnnotationType type, DocumentmanagerConfig.Annotationtype.Builder atb) {
atb.
id(type.getId()).
name(type.getName());
@@ -62,34 +62,34 @@ public class DocumentManager {
}
}
}
- private void handleAnnotations(Collection<AnnotationType> types, DocumentmanagerConfig.Builder builder) {
+ private void buildConfig(Collection<AnnotationType> types, DocumentmanagerConfig.Builder builder) {
for (AnnotationType type : types) {
DocumentmanagerConfig.Annotationtype.Builder atb = new DocumentmanagerConfig.Annotationtype.Builder();
- handleAnnotation(type, atb);
+ buildConfig(type, atb);
builder.annotationtype(atb);
}
}
- private void handleDataType(DataType type, Datatype.Builder dtc) {
- dtc.id(type.getId());
+ private void buildConfig(DataType type, Datatype.Builder builder) {
+ builder.id(type.getId());
if (type instanceof ArrayDataType) {
CollectionDataType dt = (CollectionDataType) type;
- dtc.arraytype(new Datatype.Arraytype.Builder().datatype(dt.getNestedType().getId()));
+ builder.arraytype(new Datatype.Arraytype.Builder().datatype(dt.getNestedType().getId()));
} else if (type instanceof WeightedSetDataType) {
WeightedSetDataType dt = (WeightedSetDataType) type;
- dtc.weightedsettype(new Datatype.Weightedsettype.Builder().
+ builder.weightedsettype(new Datatype.Weightedsettype.Builder().
datatype(dt.getNestedType().getId()).
createifnonexistant(dt.createIfNonExistent()).
removeifzero(dt.removeIfZero()));
} else if (type instanceof MapDataType) {
MapDataType mtype = (MapDataType) type;
- dtc.maptype(new Datatype.Maptype.Builder().
+ builder.maptype(new Datatype.Maptype.Builder().
keytype(mtype.getKeyType().getId()).
valtype(mtype.getValueType().getId()));
} else if (type instanceof DocumentType) {
DocumentType dt = (DocumentType) type;
Datatype.Documenttype.Builder doc = new Datatype.Documenttype.Builder();
- dtc.documenttype(doc);
+ builder.documenttype(doc);
doc.
name(dt.getName()).
headerstruct(dt.getHeaderType().getId()).
@@ -100,7 +100,7 @@ public class DocumentManager {
} else if (type instanceof NewDocumentType) {
NewDocumentType dt = (NewDocumentType) type;
Datatype.Documenttype.Builder doc = new Datatype.Documenttype.Builder();
- dtc.documenttype(doc);
+ builder.documenttype(doc);
doc.
name(dt.getName()).
headerstruct(dt.getHeader().getId()).
@@ -108,49 +108,56 @@ public class DocumentManager {
for (NewDocumentType inherited : dt.getInherited()) {
doc.inherits(new Datatype.Documenttype.Inherits.Builder().name(inherited.getName()));
}
- handleFieldSets(dt.getFieldSets(), doc);
+ buildConfig(dt.getFieldSets(), doc);
} else if (type instanceof TemporaryStructuredDataType) {
//Ignored
} else if (type instanceof StructDataType) {
- StructDataType dt = (StructDataType) type;
- Datatype.Structtype.Builder st = new Datatype.Structtype.Builder();
- dtc.structtype(st);
- st.name(dt.getName());
- if (dt.getCompressionConfig().type.getCode() != 0) {
- st.
- compresstype(Datatype.Structtype.Compresstype.Enum.valueOf(dt.getCompressionConfig().type.toString())).
- compresslevel(dt.getCompressionConfig().compressionLevel).
- compressthreshold((int)dt.getCompressionConfig().threshold).
- compressminsize((int)dt.getCompressionConfig().minsize);
+ StructDataType structType = (StructDataType) type;
+ Datatype.Structtype.Builder structBuilder = new Datatype.Structtype.Builder();
+ builder.structtype(structBuilder);
+ structBuilder.name(structType.getName());
+ if (structType.getCompressionConfig().type.getCode() != 0) {
+ structBuilder.
+ compresstype(Datatype.Structtype.Compresstype.Enum.valueOf(structType.getCompressionConfig().type.toString())).
+ compresslevel(structType.getCompressionConfig().compressionLevel).
+ compressthreshold((int)structType.getCompressionConfig().threshold).
+ compressminsize((int)structType.getCompressionConfig().minsize);
}
- for (com.yahoo.document.Field field : dt.getFieldsThisTypeOnly()) {
- Datatype.Structtype.Field.Builder fb = new Datatype.Structtype.Field.Builder();
- st.field(fb);
- fb.name(field.getName());
+ for (com.yahoo.document.Field field : structType.getFieldsThisTypeOnly()) {
+ Datatype.Structtype.Field.Builder fieldBuilder = new Datatype.Structtype.Field.Builder();
+ structBuilder.field(fieldBuilder);
+ fieldBuilder.name(field.getName());
if (field.hasForcedId()) {
- fb.id(new Datatype.Structtype.Field.Id.Builder().id(field.getId()));
+ fieldBuilder.id(new Datatype.Structtype.Field.Id.Builder().id(field.getId()));
}
- fb.datatype(field.getDataType().getId());
+ fieldBuilder.datatype(field.getDataType().getId());
+
+ if (field.getDataType() instanceof TensorDataType)
+ fieldBuilder.detailedtype(((TensorDataType)field.getDataType()).getTensorType().toString());
}
- for (StructDataType inherited : dt.getInheritedTypes()) {
- st.inherits(new Datatype.Structtype.Inherits.Builder().name(inherited.getName()));
+ for (StructDataType inherited : structType.getInheritedTypes()) {
+ structBuilder.inherits(new Datatype.Structtype.Inherits.Builder().name(inherited.getName()));
}
} else if (type instanceof AnnotationReferenceDataType) {
AnnotationReferenceDataType annotationRef = (AnnotationReferenceDataType) type;
- dtc.annotationreftype(new Datatype.Annotationreftype.Builder().annotation(annotationRef.getAnnotationType().getName()));
+ builder.annotationreftype(new Datatype.Annotationreftype.Builder().annotation(annotationRef.getAnnotationType().getName()));
+ } else if (type instanceof TensorDataType) {
+ // Nothing to do; the type of the tensor is instead stored in each field as detailed type information
+ // to provide better compatibility. A tensor field can have its tensorType changed (in compatible ways)
+ // without changing the field type and thus requiring data refeed
} else {
- throw new IllegalArgumentException("Can not handle datatype '" + type.getName());
+ throw new IllegalArgumentException("Can not create config for data type '" + type.getName());
}
}
- private void handleFieldSets(Set<FieldSet> fieldSets, Datatype.Documenttype.Builder doc) {
-
+ private void buildConfig(Set<FieldSet> fieldSets, Datatype.Documenttype.Builder doc) {
for (FieldSet builtinFs : fieldSets) {
- handleFieldSet(builtinFs, doc);
+ buildConfig(builtinFs, doc);
}
}
- private void handleFieldSet(FieldSet fs, Datatype.Documenttype.Builder doc) {
+ private void buildConfig(FieldSet fs, Datatype.Documenttype.Builder doc) {
doc.fieldsets(fs.getName(), new Datatype.Documenttype.Fieldsets.Builder().fields(fs.getFieldNames()));
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
index 2ba34def464..ebe18b36410 100644
--- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
+++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
@@ -2,13 +2,11 @@
package com.yahoo.vespa.configmodel.producers;
import com.yahoo.document.*;
-import com.yahoo.document.DocumenttypesConfig.Builder;
import com.yahoo.document.annotation.AnnotationReferenceDataType;
import com.yahoo.document.annotation.AnnotationType;
import com.yahoo.documentmodel.DataTypeCollection;
import com.yahoo.documentmodel.NewDocumentType;
import com.yahoo.documentmodel.VespaDocumentType;
-import com.yahoo.searchdefinition.FieldSets;
import com.yahoo.searchdefinition.document.FieldSet;
import com.yahoo.vespa.documentmodel.DocumentModel;
import java.util.*;
@@ -31,12 +29,12 @@ public class DocumentTypes {
for (NewDocumentType inherited : documentType.getInherited()) {
produceInheritOrder(inherited, builder, produced);
}
- handle(documentType, builder);
+ buildConfig(documentType, builder);
produced.put(documentType.getFullName(), documentType);
}
}
- private void handle(NewDocumentType documentType, DocumenttypesConfig.Builder builder) {
+ private void buildConfig(NewDocumentType documentType, DocumenttypesConfig.Builder builder) {
if (documentType == VespaDocumentType.INSTANCE) {
return;
}
@@ -46,40 +44,40 @@ public class DocumentTypes {
name(documentType.getName()).
headerstruct(documentType.getHeader().getId()).
bodystruct(documentType.getBody().getId());
- Set<Integer> handled = new HashSet<>();
+ Set<Integer> built = new HashSet<>();
for (NewDocumentType inherited : documentType.getInherited()) {
db.inherits(new DocumenttypesConfig.Documenttype.Inherits.Builder().id(inherited.getId()));
- markAsHandled(handled, inherited.getAllTypes());
+ markAsBuilt(built, inherited.getAllTypes());
}
for (DataType dt : documentType.getTypes()) {
- handle(dt, db, handled);
+ buildConfig(dt, db, built);
}
for(AnnotationType annotation : documentType.getAnnotations()) {
DocumenttypesConfig.Documenttype.Annotationtype.Builder atb = new DocumenttypesConfig.Documenttype.Annotationtype.Builder();
db.annotationtype(atb);
- handle(annotation, atb);
+ buildConfig(annotation, atb);
}
- handleFieldSets(documentType.getFieldSets(), db);
+ buildConfig(documentType.getFieldSets(), db);
builder.documenttype(db);
}
- private void handleFieldSets(Set<FieldSet> fieldSets, com.yahoo.document.DocumenttypesConfig.Documenttype.Builder db) {
+ private void buildConfig(Set<FieldSet> fieldSets, com.yahoo.document.DocumenttypesConfig.Documenttype.Builder db) {
for (FieldSet fs : fieldSets) {
- handleFieldSet(fs, db);
+ buildConfig(fs, db);
}
}
- private void handleFieldSet(FieldSet fs, DocumenttypesConfig.Documenttype.Builder db) {
+ private void buildConfig(FieldSet fs, DocumenttypesConfig.Documenttype.Builder db) {
db.fieldsets(fs.getName(), new DocumenttypesConfig.Documenttype.Fieldsets.Builder().fields(fs.getFieldNames()));
}
- private void markAsHandled(Set<Integer> handled, DataTypeCollection typeCollection) {
+ private void markAsBuilt(Set<Integer> built, DataTypeCollection typeCollection) {
for (DataType type : typeCollection.getTypes()) {
- handled.add(type.getId());
+ built.add(type.getId());
}
}
- private void handle(AnnotationType annotation, DocumenttypesConfig.Documenttype.Annotationtype.Builder builder) {
+ private void buildConfig(AnnotationType annotation, DocumenttypesConfig.Documenttype.Annotationtype.Builder builder) {
builder.
id(annotation.getId()).
name(annotation.getName());
@@ -92,67 +90,77 @@ public class DocumentTypes {
}
}
- private void handle(DataType type, DocumenttypesConfig.Documenttype.Builder db, Set<Integer> handled) {
- if ((VespaDocumentType.INSTANCE.getDataType(type.getId()) == null) && ! handled.contains(type.getId())) {
- handled.add(type.getId());
- DocumenttypesConfig.Documenttype.Datatype.Builder dtb = new DocumenttypesConfig.Documenttype.Datatype.Builder();
- dtb.id(type.getId());
+ private void buildConfig(DataType type, DocumenttypesConfig.Documenttype.Builder documentBuilder, Set<Integer> built) {
+ if ((VespaDocumentType.INSTANCE.getDataType(type.getId()) == null) && ! built.contains(type.getId())) {
+ built.add(type.getId());
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder = new DocumenttypesConfig.Documenttype.Datatype.Builder();
+ dataTypeBuilder.id(type.getId());
if (type instanceof StructDataType) {
- dtb.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.valueOf("STRUCT"));
+ dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.STRUCT);
StructDataType dt = (StructDataType) type;
- DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder sb = new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder();
- dtb.sstruct(sb);
- sb.name(dt.getName());
+ DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder structBuilder = new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder();
+ dataTypeBuilder.sstruct(structBuilder);
+ structBuilder.name(dt.getName());
if (dt.getCompressionConfig().type.getCode() != 0) {
- sb.compression(new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Compression.Builder().
+ structBuilder.compression(new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Compression.Builder().
type(DocumenttypesConfig.Documenttype.Datatype.Sstruct.Compression.Type.Enum.valueOf(dt.getCompressionConfig().type.toString())).
level(dt.getCompressionConfig().compressionLevel).
threshold((int)dt.getCompressionConfig().threshold).
minsize((int)dt.getCompressionConfig().minsize));
}
for (com.yahoo.document.Field field : dt.getFields()) {
- sb.field(new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder().
- name(field.getName()).
+ DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder builder =
+ new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder();
+ builder.name(field.getName()).
id(field.getId()).
id_v6(field.getIdV6()).
- datatype(field.getDataType().getId()));
- handle(field.getDataType(), db, handled);
+ datatype(field.getDataType().getId());
+ if (field.getDataType() instanceof TensorDataType)
+ builder.detailedtype(((TensorDataType)field.getDataType()).getTensorType().toString());
+ structBuilder.field(builder);
+ buildConfig(field.getDataType(), documentBuilder, built);
}
} else if (type instanceof ArrayDataType) {
- dtb.
- type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.valueOf("ARRAY")).
+ dataTypeBuilder.
+ type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.ARRAY).
array(new DocumenttypesConfig.Documenttype.Datatype.Array.Builder().
element(new DocumenttypesConfig.Documenttype.Datatype.Array.Element.Builder().id(((ArrayDataType)type).getNestedType().getId())));
- handle(((ArrayDataType)type).getNestedType(), db, handled);
+ buildConfig(((ArrayDataType)type).getNestedType(), documentBuilder, built);
} else if (type instanceof WeightedSetDataType) {
- dtb.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.valueOf("WSET")).
+ dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.WSET).
wset(new DocumenttypesConfig.Documenttype.Datatype.Wset.Builder().
key(new DocumenttypesConfig.Documenttype.Datatype.Wset.Key.Builder().
id(((WeightedSetDataType)type).getNestedType().getId())).
createifnonexistent(((WeightedSetDataType)type).createIfNonExistent()).
removeifzero(((WeightedSetDataType)type).removeIfZero()));
- handle(((WeightedSetDataType)type).getNestedType(), db, handled);
+ buildConfig(((WeightedSetDataType)type).getNestedType(), documentBuilder, built);
} else if (type instanceof MapDataType) {
- dtb.
- type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.valueOf("MAP")).
+ dataTypeBuilder.
+ type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.MAP).
map(new DocumenttypesConfig.Documenttype.Datatype.Map.Builder().
key(new DocumenttypesConfig.Documenttype.Datatype.Map.Key.Builder().
id(((MapDataType)type).getKeyType().getId())).
value(new DocumenttypesConfig.Documenttype.Datatype.Map.Value.Builder().
id(((MapDataType)type).getValueType().getId())));
- handle(((MapDataType)type).getKeyType(), db, handled);
- handle(((MapDataType)type).getValueType(), db, handled);
+ buildConfig(((MapDataType)type).getKeyType(), documentBuilder, built);
+ buildConfig(((MapDataType)type).getValueType(), documentBuilder, built);
} else if (type instanceof AnnotationReferenceDataType) {
- dtb.
- type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.valueOf("ANNOTATIONREF")).
+ dataTypeBuilder.
+ type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.ANNOTATIONREF).
annotationref(new DocumenttypesConfig.Documenttype.Datatype.Annotationref.Builder().
annotation(new DocumenttypesConfig.Documenttype.Datatype.Annotationref.Annotation.Builder().
id(((AnnotationReferenceDataType)type).getAnnotationType().getId())));
+ } else if (type instanceof TensorDataType) {
+ // The type of the tensor is not stored here but instead in each field as detailed type information
+ // to provide better compatibility. A tensor field can have its tensorType changed (in compatible ways)
+ // without changing the field type and thus requiring data refeed
+ return;
} else {
return;
}
- db.datatype(dtb);
+ documentBuilder.datatype(dataTypeBuilder);
}
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidator.java
index c03fb0617b8..1d39d1e6928 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidator.java
@@ -43,7 +43,7 @@ public class SearchDataTypeValidator extends Validator {
for (Field field : doc.fieldSet()) {
DataType fieldType = field.getDataType();
disallowIndexingOfMaps(cluster, def, field);
- if (!validateDataType(fieldType)) {
+ if ( ! isSupportedInSearchClusters(fieldType)) {
throw new IllegalArgumentException("Field type '" + fieldType.getName() + "' is illegal for search " +
"clusters (field '" + field.getName() + "' in definition '" +
def.getName() + "' for cluster '" + cluster.getClusterName() + "').");
@@ -51,28 +51,30 @@ public class SearchDataTypeValidator extends Validator {
}
}
- private boolean validateDataType(DataType dataType) {
- if (dataType instanceof ArrayDataType ||
- dataType instanceof WeightedSetDataType)
- {
- return validateDataType(((CollectionDataType)dataType).getNestedType());
+ private boolean isSupportedInSearchClusters(DataType dataType) {
+ if (dataType instanceof ArrayDataType || dataType instanceof WeightedSetDataType) {
+ return isSupportedInSearchClusters(((CollectionDataType)dataType).getNestedType());
}
- if (dataType instanceof StructDataType) {
+ else if (dataType instanceof StructDataType) {
return true; // Struct will work for summary TODO maybe check individual fields
}
- if (dataType instanceof MapDataType) {
+ else if (dataType instanceof MapDataType) {
return true; // Maps will work for summary, see disallowIndexingOfMaps()
}
- return dataType.equals(DataType.INT) ||
- dataType.equals(DataType.FLOAT) ||
- dataType.equals(DataType.STRING) ||
- dataType.equals(DataType.RAW) ||
- dataType.equals(DataType.LONG) ||
- dataType.equals(DataType.DOUBLE) ||
- dataType.equals(DataType.URI) ||
- dataType.equals(DataType.BYTE) ||
- dataType.equals(DataType.PREDICATE) ||
- dataType.equals(DataType.TENSOR);
+ else if (dataType instanceof TensorDataType) {
+ return true;
+ }
+ else {
+ return dataType.equals(DataType.INT) ||
+ dataType.equals(DataType.FLOAT) ||
+ dataType.equals(DataType.STRING) ||
+ dataType.equals(DataType.RAW) ||
+ dataType.equals(DataType.LONG) ||
+ dataType.equals(DataType.DOUBLE) ||
+ dataType.equals(DataType.URI) ||
+ dataType.equals(DataType.BYTE) ||
+ dataType.equals(DataType.PREDICATE);
+ }
}
private void disallowIndexingOfMaps(AbstractSearchCluster cluster, SearchDefinition def, Field field) {
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 32be8906ffc..3fc84f2860b 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -805,13 +805,14 @@ DataType dataType() :
DataType mapType=null;
DataType arrayType=null;
DataType wsetType=null;
-
+ TensorType tensorType;
}
{
( LOOKAHEAD(<ARRAY> <LESSTHAN>) ( <ARRAY> <LESSTHAN> arrayType = dataType() <GREATERTHAN> { return DataType.getArray(arrayType); } )
| LOOKAHEAD(<WEIGHTEDSET> <LESSTHAN>) ( <WEIGHTEDSET> <LESSTHAN> wsetType = dataType() <GREATERTHAN> { return DataType.getWeightedSet(wsetType); } )
| LOOKAHEAD(<MAP> <LESSTHAN>) ( mapType = mapDataType() { return mapType; } )
| LOOKAHEAD(<ANNOTATIONREFERENCE> <LESSTHAN>) ( mapType = annotationRefDataType() { return mapType; } )
+ | LOOKAHEAD(<TENSOR_TYPE>) ( tensorType = tensorType("Field type") { return DataType.getTensor(tensorType); } )
| ( typeName = identifier() ["[]" { isArrayOldStyle = true; }] )
)
{
diff --git a/config-model/src/test/cfg/application/validation/search_alltypes/searchdefinitions/simple.sd b/config-model/src/test/cfg/application/validation/search_alltypes/searchdefinitions/simple.sd
index d2851816bc0..a2b36416fd6 100644
--- a/config-model/src/test/cfg/application/validation/search_alltypes/searchdefinitions/simple.sd
+++ b/config-model/src/test/cfg/application/validation/search_alltypes/searchdefinitions/simple.sd
@@ -11,6 +11,6 @@ search simple {
field my_uri type uri { indexing: summary }
field my_byte type byte { indexing: summary }
field my_predicate type predicate { indexing: summary }
- field my_tensor type tensor { indexing: summary }
+ field my_tensor type tensor(x{}) { indexing: summary }
}
}
diff --git a/config-model/src/test/configmodel/types/documentmanager.cfg b/config-model/src/test/configmodel/types/documentmanager.cfg
index ac148209d6b..6b01934307a 100644
--- a/config-model/src/test/configmodel/types/documentmanager.cfg
+++ b/config-model/src/test/configmodel/types/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -1865479609
datatype[1].maptype[0].keytype 2
datatype[1].maptype[0].valtype 4
@@ -22,12 +24,16 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "Version"
datatype[2].structtype[0].field[0].datatype 0
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "Name"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[2].structtype[0].field[2].name "FlagsCounter"
datatype[2].structtype[0].field[2].datatype -1865479609
+datatype[2].structtype[0].field[2].detailedtype ""
datatype[2].structtype[0].field[3].name "anotherfolder"
datatype[2].structtype[0].field[3].datatype 294108848
+datatype[2].structtype[0].field[3].detailedtype ""
datatype[3].id 109267174
datatype[3].structtype[0].name "sct"
datatype[3].structtype[0].version 0
@@ -37,8 +43,10 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "s1"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "s2"
datatype[3].structtype[0].field[1].datatype 2
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[4].id 49942803
datatype[4].arraytype[0].datatype 16
datatype[5].id 339965458
@@ -53,12 +61,16 @@ datatype[6].structtype[0].compressthreshold 95
datatype[6].structtype[0].compressminsize 800
datatype[6].structtype[0].field[0].name "bytearr"
datatype[6].structtype[0].field[0].datatype 49942803
+datatype[6].structtype[0].field[0].detailedtype ""
datatype[6].structtype[0].field[1].name "mymap"
datatype[6].structtype[0].field[1].datatype 339965458
+datatype[6].structtype[0].field[1].detailedtype ""
datatype[6].structtype[0].field[2].name "title"
datatype[6].structtype[0].field[2].datatype 2
+datatype[6].structtype[0].field[2].detailedtype ""
datatype[6].structtype[0].field[3].name "structfield"
datatype[6].structtype[0].field[3].datatype 2
+datatype[6].structtype[0].field[3].detailedtype ""
datatype[7].id -1245117006
datatype[7].arraytype[0].datatype 0
datatype[8].id 1328286588
@@ -115,62 +127,91 @@ datatype[24].structtype[0].compressthreshold 95
datatype[24].structtype[0].compressminsize 800
datatype[24].structtype[0].field[0].name "abyte"
datatype[24].structtype[0].field[0].datatype 16
+datatype[24].structtype[0].field[0].detailedtype ""
datatype[24].structtype[0].field[1].name "along"
datatype[24].structtype[0].field[1].datatype 4
+datatype[24].structtype[0].field[1].detailedtype ""
datatype[24].structtype[0].field[2].name "arrayfield"
datatype[24].structtype[0].field[2].datatype -1245117006
+datatype[24].structtype[0].field[2].detailedtype ""
datatype[24].structtype[0].field[3].name "setfield"
datatype[24].structtype[0].field[3].datatype 1328286588
+datatype[24].structtype[0].field[3].detailedtype ""
datatype[24].structtype[0].field[4].name "pos"
datatype[24].structtype[0].field[4].datatype 1381038251
+datatype[24].structtype[0].field[4].detailedtype ""
datatype[24].structtype[0].field[5].name "setfield2"
datatype[24].structtype[0].field[5].datatype 18
+datatype[24].structtype[0].field[5].detailedtype ""
datatype[24].structtype[0].field[6].name "setfield3"
datatype[24].structtype[0].field[6].datatype 2125328771
+datatype[24].structtype[0].field[6].detailedtype ""
datatype[24].structtype[0].field[7].name "setfield4"
datatype[24].structtype[0].field[7].datatype 2065577986
+datatype[24].structtype[0].field[7].detailedtype ""
datatype[24].structtype[0].field[8].name "tagfield"
datatype[24].structtype[0].field[8].datatype 18
+datatype[24].structtype[0].field[8].detailedtype ""
datatype[24].structtype[0].field[9].name "structfield"
datatype[24].structtype[0].field[9].datatype 109267174
+datatype[24].structtype[0].field[9].detailedtype ""
datatype[24].structtype[0].field[10].name "structarrayfield"
datatype[24].structtype[0].field[10].datatype -1244829667
+datatype[24].structtype[0].field[10].detailedtype ""
datatype[24].structtype[0].field[11].name "stringmapfield"
datatype[24].structtype[0].field[11].datatype 339965458
+datatype[24].structtype[0].field[11].detailedtype ""
datatype[24].structtype[0].field[12].name "intmapfield"
datatype[24].structtype[0].field[12].datatype -1584287606
+datatype[24].structtype[0].field[12].detailedtype ""
datatype[24].structtype[0].field[13].name "floatmapfield"
datatype[24].structtype[0].field[13].datatype 2125154557
+datatype[24].structtype[0].field[13].detailedtype ""
datatype[24].structtype[0].field[14].name "longmapfield"
datatype[24].structtype[0].field[14].datatype -1715531035
+datatype[24].structtype[0].field[14].detailedtype ""
datatype[24].structtype[0].field[15].name "doublemapfield"
datatype[24].structtype[0].field[15].datatype 2138385264
+datatype[24].structtype[0].field[15].detailedtype ""
datatype[24].structtype[0].field[16].name "arraymapfield"
datatype[24].structtype[0].field[16].datatype 435886609
+datatype[24].structtype[0].field[16].detailedtype ""
datatype[24].structtype[0].field[17].name "arrarr"
datatype[24].structtype[0].field[17].datatype -794985308
+datatype[24].structtype[0].field[17].detailedtype ""
datatype[24].structtype[0].field[18].name "maparr"
datatype[24].structtype[0].field[18].datatype 69621385
+datatype[24].structtype[0].field[18].detailedtype ""
datatype[24].structtype[0].field[19].name "mystructfield"
datatype[24].structtype[0].field[19].datatype -2092985853
+datatype[24].structtype[0].field[19].detailedtype ""
datatype[24].structtype[0].field[20].name "mystructmap"
datatype[24].structtype[0].field[20].datatype 1901258752
+datatype[24].structtype[0].field[20].detailedtype ""
datatype[24].structtype[0].field[21].name "mystructarr"
datatype[24].structtype[0].field[21].datatype 759956026
+datatype[24].structtype[0].field[21].detailedtype ""
datatype[24].structtype[0].field[22].name "Folders"
datatype[24].structtype[0].field[22].datatype -389833101
+datatype[24].structtype[0].field[22].detailedtype ""
datatype[24].structtype[0].field[23].name "juletre"
datatype[24].structtype[0].field[23].datatype 4
+datatype[24].structtype[0].field[23].detailedtype ""
datatype[24].structtype[0].field[24].name "album0"
datatype[24].structtype[0].field[24].datatype 18
+datatype[24].structtype[0].field[24].detailedtype ""
datatype[24].structtype[0].field[25].name "album1"
datatype[24].structtype[0].field[25].datatype 18
+datatype[24].structtype[0].field[25].detailedtype ""
datatype[24].structtype[0].field[26].name "other"
datatype[24].structtype[0].field[26].datatype 4
+datatype[24].structtype[0].field[26].detailedtype ""
datatype[24].structtype[0].field[27].name "rankfeatures"
datatype[24].structtype[0].field[27].datatype 2
+datatype[24].structtype[0].field[27].detailedtype ""
datatype[24].structtype[0].field[28].name "summaryfeatures"
datatype[24].structtype[0].field[28].datatype 2
+datatype[24].structtype[0].field[28].detailedtype ""
datatype[25].id 171503364
datatype[25].maptype[0].keytype 1707615575
datatype[25].maptype[0].valtype 0
@@ -185,6 +226,7 @@ datatype[27].structtype[0].compressthreshold 95
datatype[27].structtype[0].compressminsize 800
datatype[27].structtype[0].field[0].name "complexarray"
datatype[27].structtype[0].field[0].datatype 1100964733
+datatype[27].structtype[0].field[0].detailedtype ""
datatype[28].id -853072901
datatype[28].documenttype[0].name "types"
datatype[28].documenttype[0].version 0
@@ -218,4 +260,4 @@ datatype[28].documenttype[0].fieldsets{[document]}.fields[22] "setfield4"
datatype[28].documenttype[0].fieldsets{[document]}.fields[23] "stringmapfield"
datatype[28].documenttype[0].fieldsets{[document]}.fields[24] "structarrayfield"
datatype[28].documenttype[0].fieldsets{[document]}.fields[25] "structfield"
-datatype[28].documenttype[0].fieldsets{[document]}.fields[26] "tagfield"
+datatype[28].documenttype[0].fieldsets{[document]}.fields[26] "tagfield" \ No newline at end of file
diff --git a/config-model/src/test/configmodel/types/documenttypes.cfg b/config-model/src/test/configmodel/types/documenttypes.cfg
index eacd878e13d..dc7962adec7 100644
--- a/config-model/src/test/configmodel/types/documenttypes.cfg
+++ b/config-model/src/test/configmodel/types/documenttypes.cfg
@@ -39,18 +39,22 @@ documenttype[0].datatype[1].sstruct.field[0].name "Version"
documenttype[0].datatype[1].sstruct.field[0].id 64430502
documenttype[0].datatype[1].sstruct.field[0].id_v6 634243672
documenttype[0].datatype[1].sstruct.field[0].datatype 0
+documenttype[0].datatype[1].sstruct.field[0].detailedtype ""
documenttype[0].datatype[1].sstruct.field[1].name "Name"
documenttype[0].datatype[1].sstruct.field[1].id 2002760220
documenttype[0].datatype[1].sstruct.field[1].id_v6 62942997
documenttype[0].datatype[1].sstruct.field[1].datatype 2
+documenttype[0].datatype[1].sstruct.field[1].detailedtype ""
documenttype[0].datatype[1].sstruct.field[2].name "FlagsCounter"
documenttype[0].datatype[1].sstruct.field[2].id 1741227606
documenttype[0].datatype[1].sstruct.field[2].id_v6 1287497652
documenttype[0].datatype[1].sstruct.field[2].datatype -1865479609
+documenttype[0].datatype[1].sstruct.field[2].detailedtype ""
documenttype[0].datatype[1].sstruct.field[3].name "anotherfolder"
documenttype[0].datatype[1].sstruct.field[3].id 1582421848
documenttype[0].datatype[1].sstruct.field[3].id_v6 1898725199
documenttype[0].datatype[1].sstruct.field[3].datatype 294108848
+documenttype[0].datatype[1].sstruct.field[3].detailedtype ""
documenttype[0].datatype[2].id 109267174
documenttype[0].datatype[2].type STRUCT
documenttype[0].datatype[2].array.element.id 0
@@ -70,10 +74,12 @@ documenttype[0].datatype[2].sstruct.field[0].name "s1"
documenttype[0].datatype[2].sstruct.field[0].id 2146820765
documenttype[0].datatype[2].sstruct.field[0].id_v6 142373281
documenttype[0].datatype[2].sstruct.field[0].datatype 2
+documenttype[0].datatype[2].sstruct.field[0].detailedtype ""
documenttype[0].datatype[2].sstruct.field[1].name "s2"
documenttype[0].datatype[2].sstruct.field[1].id 45366795
documenttype[0].datatype[2].sstruct.field[1].id_v6 31106270
documenttype[0].datatype[2].sstruct.field[1].datatype 2
+documenttype[0].datatype[2].sstruct.field[1].detailedtype ""
documenttype[0].datatype[3].id 49942803
documenttype[0].datatype[3].type ARRAY
documenttype[0].datatype[3].array.element.id 16
@@ -123,18 +129,22 @@ documenttype[0].datatype[5].sstruct.field[0].name "bytearr"
documenttype[0].datatype[5].sstruct.field[0].id 1079701754
documenttype[0].datatype[5].sstruct.field[0].id_v6 1198855694
documenttype[0].datatype[5].sstruct.field[0].datatype 49942803
+documenttype[0].datatype[5].sstruct.field[0].detailedtype ""
documenttype[0].datatype[5].sstruct.field[1].name "mymap"
documenttype[0].datatype[5].sstruct.field[1].id 1954178122
documenttype[0].datatype[5].sstruct.field[1].id_v6 707189723
documenttype[0].datatype[5].sstruct.field[1].datatype 339965458
+documenttype[0].datatype[5].sstruct.field[1].detailedtype ""
documenttype[0].datatype[5].sstruct.field[2].name "title"
documenttype[0].datatype[5].sstruct.field[2].id 567626448
documenttype[0].datatype[5].sstruct.field[2].id_v6 29129762
documenttype[0].datatype[5].sstruct.field[2].datatype 2
+documenttype[0].datatype[5].sstruct.field[2].detailedtype ""
documenttype[0].datatype[5].sstruct.field[3].name "structfield"
documenttype[0].datatype[5].sstruct.field[3].id 1726890940
documenttype[0].datatype[5].sstruct.field[3].id_v6 418303145
documenttype[0].datatype[5].sstruct.field[3].datatype 2
+documenttype[0].datatype[5].sstruct.field[3].detailedtype ""
documenttype[0].datatype[6].id -1245117006
documenttype[0].datatype[6].type ARRAY
documenttype[0].datatype[6].array.element.id 0
@@ -409,118 +419,147 @@ documenttype[0].datatype[23].sstruct.field[0].name "abyte"
documenttype[0].datatype[23].sstruct.field[0].id 110138156
documenttype[0].datatype[23].sstruct.field[0].id_v6 1369099343
documenttype[0].datatype[23].sstruct.field[0].datatype 16
+documenttype[0].datatype[23].sstruct.field[0].detailedtype ""
documenttype[0].datatype[23].sstruct.field[1].name "along"
documenttype[0].datatype[23].sstruct.field[1].id 1206464520
documenttype[0].datatype[23].sstruct.field[1].id_v6 871280609
documenttype[0].datatype[23].sstruct.field[1].datatype 4
+documenttype[0].datatype[23].sstruct.field[1].detailedtype ""
documenttype[0].datatype[23].sstruct.field[2].name "arrayfield"
documenttype[0].datatype[23].sstruct.field[2].id 965790107
documenttype[0].datatype[23].sstruct.field[2].id_v6 1010955705
documenttype[0].datatype[23].sstruct.field[2].datatype -1245117006
+documenttype[0].datatype[23].sstruct.field[2].detailedtype ""
documenttype[0].datatype[23].sstruct.field[3].name "setfield"
documenttype[0].datatype[23].sstruct.field[3].id 761581914
documenttype[0].datatype[23].sstruct.field[3].id_v6 1762943268
documenttype[0].datatype[23].sstruct.field[3].datatype 1328286588
+documenttype[0].datatype[23].sstruct.field[3].detailedtype ""
documenttype[0].datatype[23].sstruct.field[4].name "pos"
documenttype[0].datatype[23].sstruct.field[4].id 1041567475
documenttype[0].datatype[23].sstruct.field[4].id_v6 26353693
documenttype[0].datatype[23].sstruct.field[4].datatype 1381038251
+documenttype[0].datatype[23].sstruct.field[4].detailedtype ""
documenttype[0].datatype[23].sstruct.field[5].name "setfield2"
documenttype[0].datatype[23].sstruct.field[5].id 1066659198
documenttype[0].datatype[23].sstruct.field[5].id_v6 813038565
documenttype[0].datatype[23].sstruct.field[5].datatype 18
+documenttype[0].datatype[23].sstruct.field[5].detailedtype ""
documenttype[0].datatype[23].sstruct.field[6].name "setfield3"
documenttype[0].datatype[23].sstruct.field[6].id 1180155772
documenttype[0].datatype[23].sstruct.field[6].id_v6 1697232199
documenttype[0].datatype[23].sstruct.field[6].datatype 2125328771
+documenttype[0].datatype[23].sstruct.field[6].detailedtype ""
documenttype[0].datatype[23].sstruct.field[7].name "setfield4"
documenttype[0].datatype[23].sstruct.field[7].id 1254131631
documenttype[0].datatype[23].sstruct.field[7].id_v6 119755202
documenttype[0].datatype[23].sstruct.field[7].datatype 2065577986
+documenttype[0].datatype[23].sstruct.field[7].detailedtype ""
documenttype[0].datatype[23].sstruct.field[8].name "tagfield"
documenttype[0].datatype[23].sstruct.field[8].id 1653562069
documenttype[0].datatype[23].sstruct.field[8].id_v6 938523246
documenttype[0].datatype[23].sstruct.field[8].datatype 18
+documenttype[0].datatype[23].sstruct.field[8].detailedtype ""
documenttype[0].datatype[23].sstruct.field[9].name "structfield"
documenttype[0].datatype[23].sstruct.field[9].id 486207386
documenttype[0].datatype[23].sstruct.field[9].id_v6 418303145
documenttype[0].datatype[23].sstruct.field[9].datatype 109267174
+documenttype[0].datatype[23].sstruct.field[9].detailedtype ""
documenttype[0].datatype[23].sstruct.field[10].name "structarrayfield"
documenttype[0].datatype[23].sstruct.field[10].id 335048518
documenttype[0].datatype[23].sstruct.field[10].id_v6 607034174
documenttype[0].datatype[23].sstruct.field[10].datatype -1244829667
+documenttype[0].datatype[23].sstruct.field[10].detailedtype ""
documenttype[0].datatype[23].sstruct.field[11].name "stringmapfield"
documenttype[0].datatype[23].sstruct.field[11].id 117465687
documenttype[0].datatype[23].sstruct.field[11].id_v6 1492788095
documenttype[0].datatype[23].sstruct.field[11].datatype 339965458
+documenttype[0].datatype[23].sstruct.field[11].detailedtype ""
documenttype[0].datatype[23].sstruct.field[12].name "intmapfield"
documenttype[0].datatype[23].sstruct.field[12].id 121004462
documenttype[0].datatype[23].sstruct.field[12].id_v6 1642487905
documenttype[0].datatype[23].sstruct.field[12].datatype -1584287606
+documenttype[0].datatype[23].sstruct.field[12].detailedtype ""
documenttype[0].datatype[23].sstruct.field[13].name "floatmapfield"
documenttype[0].datatype[23].sstruct.field[13].id 1239120925
documenttype[0].datatype[23].sstruct.field[13].id_v6 1609437589
documenttype[0].datatype[23].sstruct.field[13].datatype 2125154557
+documenttype[0].datatype[23].sstruct.field[13].detailedtype ""
documenttype[0].datatype[23].sstruct.field[14].name "longmapfield"
documenttype[0].datatype[23].sstruct.field[14].id 477718745
documenttype[0].datatype[23].sstruct.field[14].id_v6 920341968
documenttype[0].datatype[23].sstruct.field[14].datatype -1715531035
+documenttype[0].datatype[23].sstruct.field[14].detailedtype ""
documenttype[0].datatype[23].sstruct.field[15].name "doublemapfield"
documenttype[0].datatype[23].sstruct.field[15].id 877047192
documenttype[0].datatype[23].sstruct.field[15].id_v6 957317090
documenttype[0].datatype[23].sstruct.field[15].datatype 2138385264
+documenttype[0].datatype[23].sstruct.field[15].detailedtype ""
documenttype[0].datatype[23].sstruct.field[16].name "arraymapfield"
documenttype[0].datatype[23].sstruct.field[16].id 1670805928
documenttype[0].datatype[23].sstruct.field[16].id_v6 1940354311
documenttype[0].datatype[23].sstruct.field[16].datatype 435886609
+documenttype[0].datatype[23].sstruct.field[16].detailedtype ""
documenttype[0].datatype[23].sstruct.field[17].name "arrarr"
documenttype[0].datatype[23].sstruct.field[17].id 1962567166
documenttype[0].datatype[23].sstruct.field[17].id_v6 885141301
documenttype[0].datatype[23].sstruct.field[17].datatype -794985308
+documenttype[0].datatype[23].sstruct.field[17].detailedtype ""
documenttype[0].datatype[23].sstruct.field[18].name "maparr"
documenttype[0].datatype[23].sstruct.field[18].id 904375219
documenttype[0].datatype[23].sstruct.field[18].id_v6 63700074
documenttype[0].datatype[23].sstruct.field[18].datatype 69621385
+documenttype[0].datatype[23].sstruct.field[18].detailedtype ""
documenttype[0].datatype[23].sstruct.field[19].name "mystructfield"
documenttype[0].datatype[23].sstruct.field[19].id 1348513378
documenttype[0].datatype[23].sstruct.field[19].id_v6 2033170300
documenttype[0].datatype[23].sstruct.field[19].datatype -2092985853
+documenttype[0].datatype[23].sstruct.field[19].detailedtype ""
documenttype[0].datatype[23].sstruct.field[20].name "mystructmap"
documenttype[0].datatype[23].sstruct.field[20].id 1511423250
documenttype[0].datatype[23].sstruct.field[20].id_v6 449602635
documenttype[0].datatype[23].sstruct.field[20].datatype 1901258752
+documenttype[0].datatype[23].sstruct.field[20].detailedtype ""
documenttype[0].datatype[23].sstruct.field[21].name "mystructarr"
documenttype[0].datatype[23].sstruct.field[21].id 595856991
documenttype[0].datatype[23].sstruct.field[21].id_v6 764861972
documenttype[0].datatype[23].sstruct.field[21].datatype 759956026
+documenttype[0].datatype[23].sstruct.field[21].detailedtype ""
documenttype[0].datatype[23].sstruct.field[22].name "Folders"
documenttype[0].datatype[23].sstruct.field[22].id 34575524
documenttype[0].datatype[23].sstruct.field[22].id_v6 280569744
documenttype[0].datatype[23].sstruct.field[22].datatype -389833101
+documenttype[0].datatype[23].sstruct.field[22].detailedtype ""
documenttype[0].datatype[23].sstruct.field[23].name "juletre"
documenttype[0].datatype[23].sstruct.field[23].id 1039981530
documenttype[0].datatype[23].sstruct.field[23].id_v6 2073084146
documenttype[0].datatype[23].sstruct.field[23].datatype 4
+documenttype[0].datatype[23].sstruct.field[23].detailedtype ""
documenttype[0].datatype[23].sstruct.field[24].name "album0"
documenttype[0].datatype[23].sstruct.field[24].id 764312262
documenttype[0].datatype[23].sstruct.field[24].id_v6 1409364160
documenttype[0].datatype[23].sstruct.field[24].datatype 18
+documenttype[0].datatype[23].sstruct.field[24].detailedtype ""
documenttype[0].datatype[23].sstruct.field[25].name "album1"
documenttype[0].datatype[23].sstruct.field[25].id 1967160809
documenttype[0].datatype[23].sstruct.field[25].id_v6 1833811264
documenttype[0].datatype[23].sstruct.field[25].datatype 18
+documenttype[0].datatype[23].sstruct.field[25].detailedtype ""
documenttype[0].datatype[23].sstruct.field[26].name "other"
documenttype[0].datatype[23].sstruct.field[26].id 2443357
documenttype[0].datatype[23].sstruct.field[26].id_v6 903806222
documenttype[0].datatype[23].sstruct.field[26].datatype 4
+documenttype[0].datatype[23].sstruct.field[26].detailedtype ""
documenttype[0].datatype[23].sstruct.field[27].name "rankfeatures"
documenttype[0].datatype[23].sstruct.field[27].id 1883197392
documenttype[0].datatype[23].sstruct.field[27].id_v6 699950698
documenttype[0].datatype[23].sstruct.field[27].datatype 2
+documenttype[0].datatype[23].sstruct.field[27].detailedtype ""
documenttype[0].datatype[23].sstruct.field[28].name "summaryfeatures"
documenttype[0].datatype[23].sstruct.field[28].id 1840337115
documenttype[0].datatype[23].sstruct.field[28].id_v6 1981648971
documenttype[0].datatype[23].sstruct.field[28].datatype 2
+documenttype[0].datatype[23].sstruct.field[28].detailedtype ""
documenttype[0].datatype[24].id 171503364
documenttype[0].datatype[24].type MAP
documenttype[0].datatype[24].array.element.id 0
@@ -570,6 +609,7 @@ documenttype[0].datatype[26].sstruct.field[0].name "complexarray"
documenttype[0].datatype[26].sstruct.field[0].id 1028383787
documenttype[0].datatype[26].sstruct.field[0].id_v6 658530305
documenttype[0].datatype[26].sstruct.field[0].datatype 1100964733
+documenttype[0].datatype[26].sstruct.field[0].detailedtype ""
documenttype[0].fieldsets{[document]}.fields[0] "Folders"
documenttype[0].fieldsets{[document]}.fields[1] "abyte"
documenttype[0].fieldsets{[document]}.fields[2] "album0"
@@ -596,4 +636,4 @@ documenttype[0].fieldsets{[document]}.fields[22] "setfield4"
documenttype[0].fieldsets{[document]}.fields[23] "stringmapfield"
documenttype[0].fieldsets{[document]}.fields[24] "structarrayfield"
documenttype[0].fieldsets{[document]}.fields[25] "structfield"
-documenttype[0].fieldsets{[document]}.fields[26] "tagfield"
+documenttype[0].fieldsets{[document]}.fields[26] "tagfield" \ No newline at end of file
diff --git a/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg b/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg
index d13195f1ffe..3073dd55fba 100644
--- a/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg
+++ b/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg
@@ -24,10 +24,12 @@ documenttype[0].datatype[0].sstruct.field[0].name "rankfeatures"
documenttype[0].datatype[0].sstruct.field[0].id 1883197392
documenttype[0].datatype[0].sstruct.field[0].id_v6 699950698
documenttype[0].datatype[0].sstruct.field[0].datatype 2
+documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
documenttype[0].datatype[0].sstruct.field[1].name "summaryfeatures"
documenttype[0].datatype[0].sstruct.field[1].id 1840337115
documenttype[0].datatype[0].sstruct.field[1].id_v6 1981648971
documenttype[0].datatype[0].sstruct.field[1].datatype 2
+documenttype[0].datatype[0].sstruct.field[1].detailedtype ""
documenttype[0].datatype[1].id 549879017
documenttype[0].datatype[1].type STRUCT
documenttype[0].datatype[1].array.element.id 0
@@ -83,14 +85,17 @@ documenttype[1].datatype[1].sstruct.field[0].name "doc_field"
documenttype[1].datatype[1].sstruct.field[0].id 819293364
documenttype[1].datatype[1].sstruct.field[0].id_v6 1634907905
documenttype[1].datatype[1].sstruct.field[0].datatype -1368624373
+documenttype[1].datatype[1].sstruct.field[0].detailedtype ""
documenttype[1].datatype[1].sstruct.field[1].name "rankfeatures"
documenttype[1].datatype[1].sstruct.field[1].id 1883197392
documenttype[1].datatype[1].sstruct.field[1].id_v6 699950698
documenttype[1].datatype[1].sstruct.field[1].datatype 2
+documenttype[1].datatype[1].sstruct.field[1].detailedtype ""
documenttype[1].datatype[1].sstruct.field[2].name "summaryfeatures"
documenttype[1].datatype[1].sstruct.field[2].id 1840337115
documenttype[1].datatype[1].sstruct.field[2].id_v6 1981648971
documenttype[1].datatype[1].sstruct.field[2].datatype 2
+documenttype[1].datatype[1].sstruct.field[2].detailedtype ""
documenttype[1].datatype[2].id 348447225
documenttype[1].datatype[2].type STRUCT
documenttype[1].datatype[2].array.element.id 0
@@ -106,4 +111,4 @@ documenttype[1].datatype[2].sstruct.compression.type NONE
documenttype[1].datatype[2].sstruct.compression.level 0
documenttype[1].datatype[2].sstruct.compression.threshold 95
documenttype[1].datatype[2].sstruct.compression.minsize 200
-documenttype[1].fieldsets{[document]}.fields[0] "doc_field"
+documenttype[1].fieldsets{[document]}.fields[0] "doc_field" \ No newline at end of file
diff --git a/config-model/src/test/derived/advanced/documentmanager.cfg b/config-model/src/test/derived/advanced/documentmanager.cfg
index 98c3d379987..532f53f51d2 100644
--- a/config-model/src/test/derived/advanced/documentmanager.cfg
+++ b/config-model/src/test/derived/advanced/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -1486737430
datatype[1].arraytype[0].datatype 2
datatype[2].id -1337915045
@@ -21,44 +23,64 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "debug_src"
datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "attributes_src"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[2].structtype[0].field[2].name "location_str"
datatype[2].structtype[0].field[2].datatype 2
+datatype[2].structtype[0].field[2].detailedtype ""
datatype[2].structtype[0].field[3].name "title_src"
datatype[2].structtype[0].field[3].datatype 2
+datatype[2].structtype[0].field[3].detailedtype ""
datatype[2].structtype[0].field[4].name "product_src"
datatype[2].structtype[0].field[4].datatype 2
+datatype[2].structtype[0].field[4].detailedtype ""
datatype[2].structtype[0].field[5].name "product2_src"
datatype[2].structtype[0].field[5].datatype 2
+datatype[2].structtype[0].field[5].detailedtype ""
datatype[2].structtype[0].field[6].name "product3_src"
datatype[2].structtype[0].field[6].datatype 2
+datatype[2].structtype[0].field[6].detailedtype ""
datatype[2].structtype[0].field[7].name "debug"
datatype[2].structtype[0].field[7].datatype 2
+datatype[2].structtype[0].field[7].detailedtype ""
datatype[2].structtype[0].field[8].name "attributes"
datatype[2].structtype[0].field[8].datatype 2
+datatype[2].structtype[0].field[8].detailedtype ""
datatype[2].structtype[0].field[9].name "title"
datatype[2].structtype[0].field[9].datatype 2
+datatype[2].structtype[0].field[9].detailedtype ""
datatype[2].structtype[0].field[10].name "product"
datatype[2].structtype[0].field[10].datatype 2
+datatype[2].structtype[0].field[10].detailedtype ""
datatype[2].structtype[0].field[11].name "product2"
datatype[2].structtype[0].field[11].datatype 2
+datatype[2].structtype[0].field[11].detailedtype ""
datatype[2].structtype[0].field[12].name "product3"
datatype[2].structtype[0].field[12].datatype 2
+datatype[2].structtype[0].field[12].detailedtype ""
datatype[2].structtype[0].field[13].name "location_zcurve"
datatype[2].structtype[0].field[13].datatype 4
+datatype[2].structtype[0].field[13].detailedtype ""
datatype[2].structtype[0].field[14].name "title_s"
datatype[2].structtype[0].field[14].datatype 2
+datatype[2].structtype[0].field[14].detailedtype ""
datatype[2].structtype[0].field[15].name "location.position"
datatype[2].structtype[0].field[15].datatype -1486737430
+datatype[2].structtype[0].field[15].detailedtype ""
datatype[2].structtype[0].field[16].name "location.distance"
datatype[2].structtype[0].field[16].datatype 0
+datatype[2].structtype[0].field[16].detailedtype ""
datatype[2].structtype[0].field[17].name "mysummary"
datatype[2].structtype[0].field[17].datatype 2
+datatype[2].structtype[0].field[17].detailedtype ""
datatype[2].structtype[0].field[18].name "rankfeatures"
datatype[2].structtype[0].field[18].datatype 2
+datatype[2].structtype[0].field[18].detailedtype ""
datatype[2].structtype[0].field[19].name "summaryfeatures"
datatype[2].structtype[0].field[19].datatype 2
+datatype[2].structtype[0].field[19].detailedtype ""
datatype[3].id -704605648
datatype[3].structtype[0].name "advanced.body"
datatype[3].structtype[0].version 0
diff --git a/config-model/src/test/derived/advanced/index-info.cfg b/config-model/src/test/derived/advanced/index-info.cfg
index 1bb68110dae..7af5b858d3a 100644
--- a/config-model/src/test/derived/advanced/index-info.cfg
+++ b/config-model/src/test/derived/advanced/index-info.cfg
@@ -75,23 +75,23 @@ indexinfo[0].command[36].indexname "summaryfeatures"
indexinfo[0].command[36].command "index"
indexinfo[0].command[37].indexname "title"
indexinfo[0].command[37].command "index"
-indexinfo[0].command[38].indexname "titleabstract"
-indexinfo[0].command[38].command "index"
-indexinfo[0].command[39].indexname "default"
-indexinfo[0].command[39].command "index"
-indexinfo[0].command[40].indexname "title"
-indexinfo[0].command[40].command "lowercase"
+indexinfo[0].command[38].indexname "title"
+indexinfo[0].command[38].command "lowercase"
+indexinfo[0].command[39].indexname "title"
+indexinfo[0].command[39].command "normalize"
+indexinfo[0].command[40].indexname "title_s"
+indexinfo[0].command[40].command "index"
indexinfo[0].command[41].indexname "titleabstract"
indexinfo[0].command[41].command "lowercase"
-indexinfo[0].command[42].indexname "default"
-indexinfo[0].command[42].command "lowercase"
-indexinfo[0].command[43].indexname "title"
+indexinfo[0].command[42].indexname "titleabstract"
+indexinfo[0].command[42].command "index"
+indexinfo[0].command[43].indexname "titleabstract"
indexinfo[0].command[43].command "normalize"
-indexinfo[0].command[44].indexname "titleabstract"
-indexinfo[0].command[44].command "normalize"
+indexinfo[0].command[44].indexname "default"
+indexinfo[0].command[44].command "lowercase"
indexinfo[0].command[45].indexname "default"
-indexinfo[0].command[45].command "normalize"
-indexinfo[0].command[46].indexname "title_s"
-indexinfo[0].command[46].command "index"
+indexinfo[0].command[45].command "index"
+indexinfo[0].command[46].indexname "default"
+indexinfo[0].command[46].command "normalize"
indexinfo[0].alias[0].alias "headline"
indexinfo[0].alias[0].indexname "title" \ No newline at end of file
diff --git a/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg b/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg
index db85eb92e9b..1e9ffba5ca0 100755
--- a/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsimplicitstruct/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 517946310
datatype[1].structtype[0].name "annotation.banana"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "brand"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id -364910881
datatype[2].structtype[0].name "annotationsimplicitstruct.header"
datatype[2].structtype[0].version 0
@@ -28,8 +31,10 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "rankfeatures"
datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "summaryfeatures"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[3].id -1503592268
datatype[3].structtype[0].name "annotationsimplicitstruct.body"
datatype[3].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg b/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg
index 11e179ec748..db7fba5d9a6 100755
--- a/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsinheritance/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 517946310
datatype[1].structtype[0].name "annotation.banana"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "brand"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id -1339036621
datatype[2].structtype[0].name "annotation.intern"
datatype[2].structtype[0].version 0
@@ -28,6 +31,7 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "enddate"
datatype[2].structtype[0].field[0].datatype 4
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].inherits[0].name "annotation.employee"
datatype[2].structtype[0].inherits[0].version 0
datatype[3].id 249059607
@@ -39,6 +43,7 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "color"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].inherits[0].name "annotation.vehicle"
datatype[3].structtype[0].inherits[0].version 0
datatype[4].id -1466283082
@@ -50,6 +55,7 @@ datatype[4].structtype[0].compressthreshold 95
datatype[4].structtype[0].compressminsize 800
datatype[4].structtype[0].field[0].name "name"
datatype[4].structtype[0].field[0].datatype 2
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[5].id -858216177
datatype[5].structtype[0].name "annotation.employee"
datatype[5].structtype[0].version 0
@@ -59,6 +65,7 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "employeeid"
datatype[5].structtype[0].field[0].datatype 0
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[5].structtype[0].inherits[0].name "annotation.worker"
datatype[5].structtype[0].inherits[0].version 0
datatype[6].id -1874092641
@@ -79,6 +86,7 @@ datatype[7].structtype[0].compressthreshold 95
datatype[7].structtype[0].compressminsize 800
datatype[7].structtype[0].field[0].name "numwheels"
datatype[7].structtype[0].field[0].datatype 0
+datatype[7].structtype[0].field[0].detailedtype ""
datatype[8].id -1406250281
datatype[8].structtype[0].name "annotationsinheritance.header"
datatype[8].structtype[0].version 0
@@ -88,8 +96,10 @@ datatype[8].structtype[0].compressthreshold 95
datatype[8].structtype[0].compressminsize 800
datatype[8].structtype[0].field[0].name "rankfeatures"
datatype[8].structtype[0].field[0].datatype 2
+datatype[8].structtype[0].field[0].detailedtype ""
datatype[8].structtype[0].field[1].name "summaryfeatures"
datatype[8].structtype[0].field[1].datatype 2
+datatype[8].structtype[0].field[1].detailedtype ""
datatype[9].id 1181354668
datatype[9].structtype[0].name "annotationsinheritance.body"
datatype[9].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg b/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg
index e49d0753296..6f83fbc5ce6 100755
--- a/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsinheritance2/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 1443831334
datatype[1].structtype[0].name "annotation.c"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "cfoo"
datatype[1].structtype[0].field[0].datatype 0
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 1443832295
datatype[2].structtype[0].name "annotation.d"
datatype[2].structtype[0].version 0
@@ -46,6 +49,7 @@ datatype[4].structtype[0].compressthreshold 95
datatype[4].structtype[0].compressminsize 800
datatype[4].structtype[0].field[0].name "gfoo"
datatype[4].structtype[0].field[0].datatype 2
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[5].id 424382193
datatype[5].structtype[0].name "annotationsinheritance2.header"
datatype[5].structtype[0].version 0
@@ -55,8 +59,10 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "rankfeatures"
datatype[5].structtype[0].field[0].datatype 2
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[5].structtype[0].field[1].name "summaryfeatures"
datatype[5].structtype[0].field[1].datatype 2
+datatype[5].structtype[0].field[1].detailedtype ""
datatype[6].id 1375438150
datatype[6].structtype[0].name "annotationsinheritance2.body"
datatype[6].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg b/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg
index d612a3b168b..db333ed0a13 100755
--- a/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationspolymorphy/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -2014701853
datatype[1].annotationreftype[0].annotation "super"
datatype[2].id -888007918
@@ -21,6 +23,7 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "a"
datatype[2].structtype[0].field[0].datatype -2014701853
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[3].id -1552577796
datatype[3].structtype[0].name "annotationspolymorphy.header"
datatype[3].structtype[0].version 0
@@ -30,8 +33,10 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "rankfeatures"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "summaryfeatures"
datatype[3].structtype[0].field[1].datatype 2
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[4].id -570750959
datatype[4].structtype[0].name "annotationspolymorphy.body"
datatype[4].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationsreference/documentmanager.cfg b/config-model/src/test/derived/annotationsreference/documentmanager.cfg
index 3218262b54d..25106a41836 100755
--- a/config-model/src/test/derived/annotationsreference/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsreference/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 517946310
datatype[1].structtype[0].name "annotation.banana"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "brand"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 400622300
datatype[2].annotationreftype[0].annotation "b"
datatype[3].id 1443829412
@@ -30,6 +33,7 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "foo"
datatype[3].structtype[0].field[0].datatype 400622300
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[4].id -808460615
datatype[4].annotationreftype[0].annotation "banana"
datatype[5].id -770307521
@@ -41,6 +45,7 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "what"
datatype[5].structtype[0].field[0].datatype -808460615
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[6].id 756306917
datatype[6].annotationreftype[0].annotation "cyclic"
datatype[7].id 1781099546
@@ -52,6 +57,7 @@ datatype[7].structtype[0].compressthreshold 95
datatype[7].structtype[0].compressminsize 800
datatype[7].structtype[0].field[0].name "blah"
datatype[7].structtype[0].field[0].datatype 756306917
+datatype[7].structtype[0].field[0].detailedtype ""
datatype[8].id 571255414
datatype[8].structtype[0].name "annotationsreference.header"
datatype[8].structtype[0].version 0
@@ -61,8 +67,10 @@ datatype[8].structtype[0].compressthreshold 95
datatype[8].structtype[0].compressminsize 800
datatype[8].structtype[0].field[0].name "rankfeatures"
datatype[8].structtype[0].field[0].datatype 2
+datatype[8].structtype[0].field[0].detailedtype ""
datatype[8].structtype[0].field[1].name "summaryfeatures"
datatype[8].structtype[0].field[1].datatype 2
+datatype[8].structtype[0].field[1].detailedtype ""
datatype[9].id 1692909067
datatype[9].structtype[0].name "annotationsreference.body"
datatype[9].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationssimple/documentmanager.cfg b/config-model/src/test/derived/annotationssimple/documentmanager.cfg
index 54832bb97f9..8908d886ff9 100755
--- a/config-model/src/test/derived/annotationssimple/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationssimple/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -1205708249
datatype[1].structtype[0].name "annotationssimple.header"
datatype[1].structtype[0].version 0
@@ -19,8 +21,10 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "rankfeatures"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "summaryfeatures"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[2].id -682121732
datatype[2].structtype[0].name "annotationssimple.body"
datatype[2].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationsstruct/documentmanager.cfg b/config-model/src/test/derived/annotationsstruct/documentmanager.cfg
index f3c93b31285..ebba05e0553 100644
--- a/config-model/src/test/derived/annotationsstruct/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsstruct/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 1293792650
datatype[1].structtype[0].name "my_struct"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "my_structfield"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id -1080124700
datatype[2].structtype[0].name "annotation.my_anno"
datatype[2].structtype[0].version 0
@@ -28,6 +31,7 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "my_annofield"
datatype[2].structtype[0].field[0].datatype 1293792650
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[3].id 1341437796
datatype[3].structtype[0].name "annotationsstruct.header"
datatype[3].structtype[0].version 0
@@ -37,8 +41,10 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "rankfeatures"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "summaryfeatures"
datatype[3].structtype[0].field[1].datatype 2
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[4].id -1180029319
datatype[4].structtype[0].name "annotationsstruct.body"
datatype[4].structtype[0].version 0
diff --git a/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg b/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg
index 01e3945fc2a..49249a7307a 100644
--- a/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg
+++ b/config-model/src/test/derived/annotationsstructarray/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 1293792650
datatype[1].structtype[0].name "my_struct"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "my_structfield"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 754837689
datatype[2].arraytype[0].datatype 1293792650
datatype[3].id -1080124700
@@ -30,6 +33,7 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "my_annofield"
datatype[3].structtype[0].field[0].datatype 754837689
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[4].id 94945597
datatype[4].structtype[0].name "annotationsstructarray.header"
datatype[4].structtype[0].version 0
@@ -39,8 +43,10 @@ datatype[4].structtype[0].compressthreshold 95
datatype[4].structtype[0].compressminsize 800
datatype[4].structtype[0].field[0].name "rankfeatures"
datatype[4].structtype[0].field[0].datatype 2
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[4].structtype[0].field[1].name "summaryfeatures"
datatype[4].structtype[0].field[1].datatype 2
+datatype[4].structtype[0].field[1].detailedtype ""
datatype[5].id 1616435858
datatype[5].structtype[0].name "annotationsstructarray.body"
datatype[5].structtype[0].version 0
diff --git a/config-model/src/test/derived/arrays/documentmanager.cfg b/config-model/src/test/derived/arrays/documentmanager.cfg
index 68506844b5d..f873971f931 100644
--- a/config-model/src/test/derived/arrays/documentmanager.cfg
+++ b/config-model/src/test/derived/arrays/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -1486737430
datatype[1].arraytype[0].datatype 2
datatype[2].id -1245117006
@@ -27,18 +29,25 @@ datatype[4].structtype[0].compressthreshold 95
datatype[4].structtype[0].compressminsize 800
datatype[4].structtype[0].field[0].name "tags"
datatype[4].structtype[0].field[0].datatype -1486737430
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[4].structtype[0].field[1].name "ratings"
datatype[4].structtype[0].field[1].datatype -1245117006
+datatype[4].structtype[0].field[1].detailedtype ""
datatype[4].structtype[0].field[2].name "a"
datatype[4].structtype[0].field[2].datatype 2
+datatype[4].structtype[0].field[2].detailedtype ""
datatype[4].structtype[0].field[3].name "b"
datatype[4].structtype[0].field[3].datatype -1486737430
+datatype[4].structtype[0].field[3].detailedtype ""
datatype[4].structtype[0].field[4].name "c"
datatype[4].structtype[0].field[4].datatype 1328286588
+datatype[4].structtype[0].field[4].detailedtype ""
datatype[4].structtype[0].field[5].name "rankfeatures"
datatype[4].structtype[0].field[5].datatype 2
+datatype[4].structtype[0].field[5].detailedtype ""
datatype[4].structtype[0].field[6].name "summaryfeatures"
datatype[4].structtype[0].field[6].datatype 2
+datatype[4].structtype[0].field[6].detailedtype ""
datatype[5].id -1747896808
datatype[5].structtype[0].name "arrays.body"
datatype[5].structtype[0].version 0
diff --git a/config-model/src/test/derived/arrays/index-info.cfg b/config-model/src/test/derived/arrays/index-info.cfg
index f5f65700d89..1439dcc8bf7 100644
--- a/config-model/src/test/derived/arrays/index-info.cfg
+++ b/config-model/src/test/derived/arrays/index-info.cfg
@@ -1,63 +1,63 @@
-indexinfo[].name "arrays"
-indexinfo[].command[].indexname "sddocname"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "sddocname"
-indexinfo[].command[].command "word"
-indexinfo[].command[].indexname "tags"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "tags"
-indexinfo[].command[].command "lowercase"
-indexinfo[].command[].indexname "tags"
-indexinfo[].command[].command "multivalue"
-indexinfo[].command[].indexname "tags"
-indexinfo[].command[].command "stem:SHORTEST"
-indexinfo[].command[].indexname "tags"
-indexinfo[].command[].command "normalize"
-indexinfo[].command[].indexname "ratings"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "ratings"
-indexinfo[].command[].command "multivalue"
-indexinfo[].command[].indexname "ratings"
-indexinfo[].command[].command "attribute"
-indexinfo[].command[].indexname "default"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "default"
-indexinfo[].command[].command "lowercase"
-indexinfo[].command[].indexname "default"
-indexinfo[].command[].command "stem:SHORTEST"
-indexinfo[].command[].indexname "default"
-indexinfo[].command[].command "normalize"
-indexinfo[].command[].indexname "default"
-indexinfo[].command[].command "multivalue"
-indexinfo[].command[].indexname "a"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "a"
-indexinfo[].command[].command "lowercase"
-indexinfo[].command[].indexname "a"
-indexinfo[].command[].command "stem:SHORTEST"
-indexinfo[].command[].indexname "a"
-indexinfo[].command[].command "normalize"
-indexinfo[].command[].indexname "b"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "b"
-indexinfo[].command[].command "lowercase"
-indexinfo[].command[].indexname "b"
-indexinfo[].command[].command "multivalue"
-indexinfo[].command[].indexname "b"
-indexinfo[].command[].command "stem:SHORTEST"
-indexinfo[].command[].indexname "b"
-indexinfo[].command[].command "normalize"
-indexinfo[].command[].indexname "c"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "c"
-indexinfo[].command[].command "lowercase"
-indexinfo[].command[].indexname "c"
-indexinfo[].command[].command "multivalue"
-indexinfo[].command[].indexname "c"
-indexinfo[].command[].command "stem:SHORTEST"
-indexinfo[].command[].indexname "c"
-indexinfo[].command[].command "normalize"
-indexinfo[].command[].indexname "rankfeatures"
-indexinfo[].command[].command "index"
-indexinfo[].command[].indexname "summaryfeatures"
-indexinfo[].command[].command "index" \ No newline at end of file
+indexinfo[0].name "arrays"
+indexinfo[0].command[0].indexname "sddocname"
+indexinfo[0].command[0].command "index"
+indexinfo[0].command[1].indexname "sddocname"
+indexinfo[0].command[1].command "word"
+indexinfo[0].command[2].indexname "tags"
+indexinfo[0].command[2].command "index"
+indexinfo[0].command[3].indexname "tags"
+indexinfo[0].command[3].command "lowercase"
+indexinfo[0].command[4].indexname "tags"
+indexinfo[0].command[4].command "multivalue"
+indexinfo[0].command[5].indexname "tags"
+indexinfo[0].command[5].command "stem:SHORTEST"
+indexinfo[0].command[6].indexname "tags"
+indexinfo[0].command[6].command "normalize"
+indexinfo[0].command[7].indexname "ratings"
+indexinfo[0].command[7].command "index"
+indexinfo[0].command[8].indexname "ratings"
+indexinfo[0].command[8].command "multivalue"
+indexinfo[0].command[9].indexname "ratings"
+indexinfo[0].command[9].command "attribute"
+indexinfo[0].command[10].indexname "a"
+indexinfo[0].command[10].command "index"
+indexinfo[0].command[11].indexname "a"
+indexinfo[0].command[11].command "lowercase"
+indexinfo[0].command[12].indexname "a"
+indexinfo[0].command[12].command "stem:SHORTEST"
+indexinfo[0].command[13].indexname "a"
+indexinfo[0].command[13].command "normalize"
+indexinfo[0].command[14].indexname "b"
+indexinfo[0].command[14].command "index"
+indexinfo[0].command[15].indexname "b"
+indexinfo[0].command[15].command "lowercase"
+indexinfo[0].command[16].indexname "b"
+indexinfo[0].command[16].command "multivalue"
+indexinfo[0].command[17].indexname "b"
+indexinfo[0].command[17].command "stem:SHORTEST"
+indexinfo[0].command[18].indexname "b"
+indexinfo[0].command[18].command "normalize"
+indexinfo[0].command[19].indexname "c"
+indexinfo[0].command[19].command "index"
+indexinfo[0].command[20].indexname "c"
+indexinfo[0].command[20].command "lowercase"
+indexinfo[0].command[21].indexname "c"
+indexinfo[0].command[21].command "multivalue"
+indexinfo[0].command[22].indexname "c"
+indexinfo[0].command[22].command "stem:SHORTEST"
+indexinfo[0].command[23].indexname "c"
+indexinfo[0].command[23].command "normalize"
+indexinfo[0].command[24].indexname "rankfeatures"
+indexinfo[0].command[24].command "index"
+indexinfo[0].command[25].indexname "summaryfeatures"
+indexinfo[0].command[25].command "index"
+indexinfo[0].command[26].indexname "default"
+indexinfo[0].command[26].command "lowercase"
+indexinfo[0].command[27].indexname "default"
+indexinfo[0].command[27].command "multivalue"
+indexinfo[0].command[28].indexname "default"
+indexinfo[0].command[28].command "index"
+indexinfo[0].command[29].indexname "default"
+indexinfo[0].command[29].command "stem:SHORTEST"
+indexinfo[0].command[30].indexname "default"
+indexinfo[0].command[30].command "normalize" \ No newline at end of file
diff --git a/config-model/src/test/derived/attributeprefetch/documentmanager.cfg b/config-model/src/test/derived/attributeprefetch/documentmanager.cfg
index 92558a62509..619bced44cf 100644
--- a/config-model/src/test/derived/attributeprefetch/documentmanager.cfg
+++ b/config-model/src/test/derived/attributeprefetch/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 49942803
datatype[1].arraytype[0].datatype 16
datatype[2].id -1068914395
@@ -55,44 +57,64 @@ datatype[13].structtype[0].compressthreshold 95
datatype[13].structtype[0].compressminsize 800
datatype[13].structtype[0].field[0].name "singlebyte"
datatype[13].structtype[0].field[0].datatype 16
+datatype[13].structtype[0].field[0].detailedtype ""
datatype[13].structtype[0].field[1].name "multibyte"
datatype[13].structtype[0].field[1].datatype 49942803
+datatype[13].structtype[0].field[1].detailedtype ""
datatype[13].structtype[0].field[2].name "wsbyte"
datatype[13].structtype[0].field[2].datatype -1068914395
+datatype[13].structtype[0].field[2].detailedtype ""
datatype[13].structtype[0].field[3].name "singleint"
datatype[13].structtype[0].field[3].datatype 0
+datatype[13].structtype[0].field[3].detailedtype ""
datatype[13].structtype[0].field[4].name "multiint"
datatype[13].structtype[0].field[4].datatype -1245117006
+datatype[13].structtype[0].field[4].detailedtype ""
datatype[13].structtype[0].field[5].name "wsint"
datatype[13].structtype[0].field[5].datatype 519906144
+datatype[13].structtype[0].field[5].detailedtype ""
datatype[13].structtype[0].field[6].name "singlelong"
datatype[13].structtype[0].field[6].datatype 4
+datatype[13].structtype[0].field[6].detailedtype ""
datatype[13].structtype[0].field[7].name "multilong"
datatype[13].structtype[0].field[7].datatype 58874399
+datatype[13].structtype[0].field[7].detailedtype ""
datatype[13].structtype[0].field[8].name "wslong"
datatype[13].structtype[0].field[8].datatype -1059982799
+datatype[13].structtype[0].field[8].detailedtype ""
datatype[13].structtype[0].field[9].name "singlefloat"
datatype[13].structtype[0].field[9].datatype 1
+datatype[13].structtype[0].field[9].detailedtype ""
datatype[13].structtype[0].field[10].name "multifloat"
datatype[13].structtype[0].field[10].datatype 1650586661
+datatype[13].structtype[0].field[10].detailedtype ""
datatype[13].structtype[0].field[11].name "wsfloat"
datatype[13].structtype[0].field[11].datatype 1325751891
+datatype[13].structtype[0].field[11].detailedtype ""
datatype[13].structtype[0].field[12].name "singledouble"
datatype[13].structtype[0].field[12].datatype 5
+datatype[13].structtype[0].field[12].detailedtype ""
datatype[13].structtype[0].field[13].name "multidouble"
datatype[13].structtype[0].field[13].datatype -2054976470
+datatype[13].structtype[0].field[13].detailedtype ""
datatype[13].structtype[0].field[14].name "wsdouble"
datatype[13].structtype[0].field[14].datatype 760047548
+datatype[13].structtype[0].field[14].detailedtype ""
datatype[13].structtype[0].field[15].name "singlestring"
datatype[13].structtype[0].field[15].datatype 2
+datatype[13].structtype[0].field[15].detailedtype ""
datatype[13].structtype[0].field[16].name "multistring"
datatype[13].structtype[0].field[16].datatype -1486737430
+datatype[13].structtype[0].field[16].detailedtype ""
datatype[13].structtype[0].field[17].name "wsstring"
datatype[13].structtype[0].field[17].datatype 1328286588
+datatype[13].structtype[0].field[17].detailedtype ""
datatype[13].structtype[0].field[18].name "rankfeatures"
datatype[13].structtype[0].field[18].datatype 2
+datatype[13].structtype[0].field[18].detailedtype ""
datatype[13].structtype[0].field[19].name "summaryfeatures"
datatype[13].structtype[0].field[19].datatype 2
+datatype[13].structtype[0].field[19].detailedtype ""
datatype[14].id 932425403
datatype[14].structtype[0].name "prefetch.body"
datatype[14].structtype[0].version 0
diff --git a/config-model/src/test/derived/complex/documentmanager.cfg b/config-model/src/test/derived/complex/documentmanager.cfg
index 66ebbbb2846..e47f40f100a 100644
--- a/config-model/src/test/derived/complex/documentmanager.cfg
+++ b/config-model/src/test/derived/complex/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 1650586661
datatype[1].arraytype[0].datatype 1
datatype[2].id -1245117006
@@ -23,58 +25,85 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "title"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "location"
datatype[3].structtype[0].field[1].datatype 2
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[3].structtype[0].field[2].name "dyntitle"
datatype[3].structtype[0].field[2].datatype 2
+datatype[3].structtype[0].field[2].detailedtype ""
datatype[3].structtype[0].field[3].name "special1"
datatype[3].structtype[0].field[3].datatype 2
+datatype[3].structtype[0].field[3].detailedtype ""
datatype[3].structtype[0].field[4].name "special2"
datatype[3].structtype[0].field[4].datatype 2
+datatype[3].structtype[0].field[4].detailedtype ""
datatype[3].structtype[0].field[5].name "special3"
datatype[3].structtype[0].field[5].datatype 2
+datatype[3].structtype[0].field[5].detailedtype ""
datatype[3].structtype[0].field[6].name "prefixenabled"
datatype[3].structtype[0].field[6].datatype 2
+datatype[3].structtype[0].field[6].detailedtype ""
datatype[3].structtype[0].field[7].name "source"
datatype[3].structtype[0].field[7].datatype 10
+datatype[3].structtype[0].field[7].detailedtype ""
datatype[3].structtype[0].field[8].name "docurl"
datatype[3].structtype[0].field[8].datatype 10
+datatype[3].structtype[0].field[8].detailedtype ""
datatype[3].structtype[0].field[9].name "fleeting"
datatype[3].structtype[0].field[9].datatype 1650586661
+datatype[3].structtype[0].field[9].detailedtype ""
datatype[3].structtype[0].field[10].name "fleeting2"
datatype[3].structtype[0].field[10].datatype 1
+datatype[3].structtype[0].field[10].detailedtype ""
datatype[3].structtype[0].field[11].name "foundat"
datatype[3].structtype[0].field[11].datatype 4
+datatype[3].structtype[0].field[11].detailedtype ""
datatype[3].structtype[0].field[12].name "collapseby"
datatype[3].structtype[0].field[12].datatype 0
+datatype[3].structtype[0].field[12].detailedtype ""
datatype[3].structtype[0].field[13].name "yEaR"
datatype[3].structtype[0].field[13].datatype 0
+datatype[3].structtype[0].field[13].detailedtype ""
datatype[3].structtype[0].field[14].name "stringfield"
datatype[3].structtype[0].field[14].datatype 2
+datatype[3].structtype[0].field[14].detailedtype ""
datatype[3].structtype[0].field[15].name "exactemento"
datatype[3].structtype[0].field[15].datatype 2
+datatype[3].structtype[0].field[15].detailedtype ""
datatype[3].structtype[0].field[16].name "exactagain"
datatype[3].structtype[0].field[16].datatype 2
+datatype[3].structtype[0].field[16].detailedtype ""
datatype[3].structtype[0].field[17].name "ts"
datatype[3].structtype[0].field[17].datatype 4
+datatype[3].structtype[0].field[17].detailedtype ""
datatype[3].structtype[0].field[18].name "combineda"
datatype[3].structtype[0].field[18].datatype 0
+datatype[3].structtype[0].field[18].detailedtype ""
datatype[3].structtype[0].field[19].name "combinedb"
datatype[3].structtype[0].field[19].datatype 2
+datatype[3].structtype[0].field[19].detailedtype ""
datatype[3].structtype[0].field[20].name "category"
datatype[3].structtype[0].field[20].datatype 2
+datatype[3].structtype[0].field[20].detailedtype ""
datatype[3].structtype[0].field[21].name "woe"
datatype[3].structtype[0].field[21].datatype 2
+datatype[3].structtype[0].field[21].detailedtype ""
datatype[3].structtype[0].field[22].name "year_sub"
datatype[3].structtype[0].field[22].datatype 0
+datatype[3].structtype[0].field[22].detailedtype ""
datatype[3].structtype[0].field[23].name "year_arr"
datatype[3].structtype[0].field[23].datatype -1245117006
+datatype[3].structtype[0].field[23].detailedtype ""
datatype[3].structtype[0].field[24].name "exact"
datatype[3].structtype[0].field[24].datatype 2
+datatype[3].structtype[0].field[24].detailedtype ""
datatype[3].structtype[0].field[25].name "rankfeatures"
datatype[3].structtype[0].field[25].datatype 2
+datatype[3].structtype[0].field[25].detailedtype ""
datatype[3].structtype[0].field[26].name "summaryfeatures"
datatype[3].structtype[0].field[26].datatype 2
+datatype[3].structtype[0].field[26].detailedtype ""
datatype[4].id -1665926686
datatype[4].structtype[0].name "complex.body"
datatype[4].structtype[0].version 0
diff --git a/config-model/src/test/derived/complex/rank-profiles.cfg b/config-model/src/test/derived/complex/rank-profiles.cfg
index 5e2804d0ee6..a317bfeb18e 100644
--- a/config-model/src/test/derived/complex/rank-profiles.cfg
+++ b/config-model/src/test/derived/complex/rank-profiles.cfg
@@ -65,4 +65,4 @@ rankprofile[3].fef.property[9].value "loggrowth(1500,4000,19)"
rankprofile[3].fef.property[10].name "nativeProximity.proximityTable.title"
rankprofile[3].fef.property[10].value "expdecay(500,3)"
rankprofile[3].fef.property[11].name "nativeProximity.reverseProximityTable.title"
-rankprofile[3].fef.property[11].value "expdecay(400,3)"
+rankprofile[3].fef.property[11].value "expdecay(400,3)" \ No newline at end of file
diff --git a/config-model/src/test/derived/documentderiver/documentmanager.cfg b/config-model/src/test/derived/documentderiver/documentmanager.cfg
index d56d90ba358..f993b465111 100644
--- a/config-model/src/test/derived/documentderiver/documentmanager.cfg
+++ b/config-model/src/test/derived/documentderiver/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -843666531
datatype[1].structtype[0].name "compressed_body.header"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "from"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 1704844530
datatype[2].structtype[0].name "compressed_body.body"
datatype[2].structtype[0].version 0
@@ -28,6 +31,7 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 0
datatype[2].structtype[0].field[0].name "content"
datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[3].id 1417245026
datatype[3].documenttype[0].name "compressed_body"
datatype[3].documenttype[0].version 0
@@ -44,6 +48,7 @@ datatype[4].structtype[0].compressthreshold 50
datatype[4].structtype[0].compressminsize 0
datatype[4].structtype[0].field[0].name "from"
datatype[4].structtype[0].field[0].datatype 2
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[5].id -1007627725
datatype[5].structtype[0].name "compressed_both.body"
datatype[5].structtype[0].version 0
@@ -53,6 +58,7 @@ datatype[5].structtype[0].compressthreshold 90
datatype[5].structtype[0].compressminsize 0
datatype[5].structtype[0].field[0].name "content"
datatype[5].structtype[0].field[0].datatype 2
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[6].id 1417705345
datatype[6].documenttype[0].name "compressed_both"
datatype[6].documenttype[0].version 0
@@ -69,6 +75,7 @@ datatype[7].structtype[0].compressthreshold 95
datatype[7].structtype[0].compressminsize 0
datatype[7].structtype[0].field[0].name "from"
datatype[7].structtype[0].field[0].datatype 2
+datatype[7].structtype[0].field[0].detailedtype ""
datatype[8].id -579052249
datatype[8].structtype[0].name "compressed_header.body"
datatype[8].structtype[0].version 0
@@ -78,6 +85,7 @@ datatype[8].structtype[0].compressthreshold 95
datatype[8].structtype[0].compressminsize 800
datatype[8].structtype[0].field[0].name "content"
datatype[8].structtype[0].field[0].datatype 2
+datatype[8].structtype[0].field[0].detailedtype ""
datatype[9].id 1946084365
datatype[9].documenttype[0].name "compressed_header"
datatype[9].documenttype[0].version 0
@@ -94,22 +102,31 @@ datatype[10].structtype[0].compressthreshold 95
datatype[10].structtype[0].compressminsize 800
datatype[10].structtype[0].field[0].name "URI"
datatype[10].structtype[0].field[0].datatype 10
+datatype[10].structtype[0].field[0].detailedtype ""
datatype[10].structtype[0].field[1].name "mailid"
datatype[10].structtype[0].field[1].datatype 2
+datatype[10].structtype[0].field[1].detailedtype ""
datatype[10].structtype[0].field[2].name "date"
datatype[10].structtype[0].field[2].datatype 0
+datatype[10].structtype[0].field[2].detailedtype ""
datatype[10].structtype[0].field[3].name "from"
datatype[10].structtype[0].field[3].datatype 2
+datatype[10].structtype[0].field[3].detailedtype ""
datatype[10].structtype[0].field[4].name "replyto"
datatype[10].structtype[0].field[4].datatype 3
+datatype[10].structtype[0].field[4].detailedtype ""
datatype[10].structtype[0].field[5].name "to"
datatype[10].structtype[0].field[5].datatype 2
+datatype[10].structtype[0].field[5].detailedtype ""
datatype[10].structtype[0].field[6].name "cc"
datatype[10].structtype[0].field[6].datatype 2
+datatype[10].structtype[0].field[6].detailedtype ""
datatype[10].structtype[0].field[7].name "bcc"
datatype[10].structtype[0].field[7].datatype 2
+datatype[10].structtype[0].field[7].detailedtype ""
datatype[10].structtype[0].field[8].name "subject"
datatype[10].structtype[0].field[8].datatype 2
+datatype[10].structtype[0].field[8].detailedtype ""
datatype[11].id -1244861287
datatype[11].arraytype[0].datatype 3
datatype[12].id -953584901
@@ -121,18 +138,25 @@ datatype[12].structtype[0].compressthreshold 95
datatype[12].structtype[0].compressminsize 800
datatype[12].structtype[0].field[0].name "mailbody"
datatype[12].structtype[0].field[0].datatype 3
+datatype[12].structtype[0].field[0].detailedtype ""
datatype[12].structtype[0].field[1].name "attachmentcount"
datatype[12].structtype[0].field[1].datatype 0
+datatype[12].structtype[0].field[1].detailedtype ""
datatype[12].structtype[0].field[2].name "attachmentnames"
datatype[12].structtype[0].field[2].datatype 2
+datatype[12].structtype[0].field[2].detailedtype ""
datatype[12].structtype[0].field[3].name "attachmenttypes"
datatype[12].structtype[0].field[3].datatype 2
+datatype[12].structtype[0].field[3].detailedtype ""
datatype[12].structtype[0].field[4].name "attachmentlanguages"
datatype[12].structtype[0].field[4].datatype 2
+datatype[12].structtype[0].field[4].detailedtype ""
datatype[12].structtype[0].field[5].name "attachmentcontent"
datatype[12].structtype[0].field[5].datatype 2
+datatype[12].structtype[0].field[5].detailedtype ""
datatype[12].structtype[0].field[6].name "attachments"
datatype[12].structtype[0].field[6].datatype -1244861287
+datatype[12].structtype[0].field[6].detailedtype ""
datatype[13].id -1081574983
datatype[13].documenttype[0].name "mail"
datatype[13].documenttype[0].version 0
@@ -159,22 +183,31 @@ datatype[17].structtype[0].compressthreshold 95
datatype[17].structtype[0].compressminsize 800
datatype[17].structtype[0].field[0].name "url"
datatype[17].structtype[0].field[0].datatype 10
+datatype[17].structtype[0].field[0].detailedtype ""
datatype[17].structtype[0].field[1].name "title"
datatype[17].structtype[0].field[1].datatype 2
+datatype[17].structtype[0].field[1].detailedtype ""
datatype[17].structtype[0].field[2].name "artist"
datatype[17].structtype[0].field[2].datatype 2
+datatype[17].structtype[0].field[2].detailedtype ""
datatype[17].structtype[0].field[3].name "year"
datatype[17].structtype[0].field[3].datatype 0
+datatype[17].structtype[0].field[3].detailedtype ""
datatype[17].structtype[0].field[4].name "description"
datatype[17].structtype[0].field[4].datatype 3
+datatype[17].structtype[0].field[4].detailedtype ""
datatype[17].structtype[0].field[5].name "tracks"
datatype[17].structtype[0].field[5].datatype -1486737430
+datatype[17].structtype[0].field[5].detailedtype ""
datatype[17].structtype[0].field[6].name "popularity"
datatype[17].structtype[0].field[6].datatype 519906144
+datatype[17].structtype[0].field[6].detailedtype ""
datatype[17].structtype[0].field[7].name "popularity2"
datatype[17].structtype[0].field[7].datatype 363959257
+datatype[17].structtype[0].field[7].detailedtype ""
datatype[17].structtype[0].field[8].name "popularity3"
datatype[17].structtype[0].field[8].datatype 363959257
+datatype[17].structtype[0].field[8].detailedtype ""
datatype[18].id 993120973
datatype[18].structtype[0].name "music.body"
datatype[18].structtype[0].version 0
@@ -198,46 +231,67 @@ datatype[20].structtype[0].compressthreshold 95
datatype[20].structtype[0].compressminsize 800
datatype[20].structtype[0].field[0].name "title"
datatype[20].structtype[0].field[0].datatype 2
+datatype[20].structtype[0].field[0].detailedtype ""
datatype[20].structtype[0].field[1].name "abstract"
datatype[20].structtype[0].field[1].datatype 2
+datatype[20].structtype[0].field[1].detailedtype ""
datatype[20].structtype[0].field[2].name "sourcename"
datatype[20].structtype[0].field[2].datatype 2
+datatype[20].structtype[0].field[2].detailedtype ""
datatype[20].structtype[0].field[3].name "providername"
datatype[20].structtype[0].field[3].datatype 2
+datatype[20].structtype[0].field[3].detailedtype ""
datatype[20].structtype[0].field[4].name "thumburl"
datatype[20].structtype[0].field[4].datatype 2
+datatype[20].structtype[0].field[4].detailedtype ""
datatype[20].structtype[0].field[5].name "thumbwidth"
datatype[20].structtype[0].field[5].datatype 0
+datatype[20].structtype[0].field[5].detailedtype ""
datatype[20].structtype[0].field[6].name "thumbheight"
datatype[20].structtype[0].field[6].datatype 0
+datatype[20].structtype[0].field[6].detailedtype ""
datatype[20].structtype[0].field[7].name "language"
datatype[20].structtype[0].field[7].datatype 2
+datatype[20].structtype[0].field[7].detailedtype ""
datatype[20].structtype[0].field[8].name "crawldocid"
datatype[20].structtype[0].field[8].datatype 2
+datatype[20].structtype[0].field[8].detailedtype ""
datatype[20].structtype[0].field[9].name "url"
datatype[20].structtype[0].field[9].datatype 10
+datatype[20].structtype[0].field[9].detailedtype ""
datatype[20].structtype[0].field[10].name "sourceurl"
datatype[20].structtype[0].field[10].datatype 10
+datatype[20].structtype[0].field[10].detailedtype ""
datatype[20].structtype[0].field[11].name "categories"
datatype[20].structtype[0].field[11].datatype 2
+datatype[20].structtype[0].field[11].detailedtype ""
datatype[20].structtype[0].field[12].name "pubdate"
datatype[20].structtype[0].field[12].datatype 4
+datatype[20].structtype[0].field[12].detailedtype ""
datatype[20].structtype[0].field[13].name "expdate"
datatype[20].structtype[0].field[13].datatype 4
+datatype[20].structtype[0].field[13].detailedtype ""
datatype[20].structtype[0].field[14].name "fingerprint"
datatype[20].structtype[0].field[14].datatype 0
+datatype[20].structtype[0].field[14].detailedtype ""
datatype[20].structtype[0].field[15].name "debug"
datatype[20].structtype[0].field[15].datatype 2
+datatype[20].structtype[0].field[15].detailedtype ""
datatype[20].structtype[0].field[16].name "attributes"
datatype[20].structtype[0].field[16].datatype 2
+datatype[20].structtype[0].field[16].detailedtype ""
datatype[20].structtype[0].field[17].name "searchcluster"
datatype[20].structtype[0].field[17].datatype 2
+datatype[20].structtype[0].field[17].detailedtype ""
datatype[20].structtype[0].field[18].name "eustaticrank"
datatype[20].structtype[0].field[18].datatype 0
+datatype[20].structtype[0].field[18].detailedtype ""
datatype[20].structtype[0].field[19].name "usstaticrank"
datatype[20].structtype[0].field[19].datatype 0
+datatype[20].structtype[0].field[19].detailedtype ""
datatype[20].structtype[0].field[20].name "asiastaticrank"
datatype[20].structtype[0].field[20].datatype 0
+datatype[20].structtype[0].field[20].detailedtype ""
datatype[21].id -2059783233
datatype[21].structtype[0].name "newssummary.body"
datatype[21].structtype[0].version 0
@@ -261,44 +315,64 @@ datatype[23].structtype[0].compressthreshold 95
datatype[23].structtype[0].compressminsize 800
datatype[23].structtype[0].field[0].name "dynabstract"
datatype[23].structtype[0].field[0].datatype 2
+datatype[23].structtype[0].field[0].detailedtype ""
datatype[23].structtype[0].field[1].name "othersourcenames"
datatype[23].structtype[0].field[1].datatype 2
+datatype[23].structtype[0].field[1].detailedtype ""
datatype[23].structtype[0].field[2].name "author"
datatype[23].structtype[0].field[2].datatype 2
+datatype[23].structtype[0].field[2].detailedtype ""
datatype[23].structtype[0].field[3].name "otherlanguages"
datatype[23].structtype[0].field[3].datatype 2
+datatype[23].structtype[0].field[3].detailedtype ""
datatype[23].structtype[0].field[4].name "charset"
datatype[23].structtype[0].field[4].datatype 2
+datatype[23].structtype[0].field[4].detailedtype ""
datatype[23].structtype[0].field[5].name "mimetype"
datatype[23].structtype[0].field[5].datatype 2
+datatype[23].structtype[0].field[5].detailedtype ""
datatype[23].structtype[0].field[6].name "referrerurl"
datatype[23].structtype[0].field[6].datatype 10
+datatype[23].structtype[0].field[6].detailedtype ""
datatype[23].structtype[0].field[7].name "sourcelocation"
datatype[23].structtype[0].field[7].datatype 2
+datatype[23].structtype[0].field[7].detailedtype ""
datatype[23].structtype[0].field[8].name "sourcecountry"
datatype[23].structtype[0].field[8].datatype 2
+datatype[23].structtype[0].field[8].detailedtype ""
datatype[23].structtype[0].field[9].name "sourcelocale"
datatype[23].structtype[0].field[9].datatype 2
+datatype[23].structtype[0].field[9].detailedtype ""
datatype[23].structtype[0].field[10].name "sourcecontinent"
datatype[23].structtype[0].field[10].datatype 2
+datatype[23].structtype[0].field[10].detailedtype ""
datatype[23].structtype[0].field[11].name "articlecountry"
datatype[23].structtype[0].field[11].datatype 2
+datatype[23].structtype[0].field[11].detailedtype ""
datatype[23].structtype[0].field[12].name "articlelocale"
datatype[23].structtype[0].field[12].datatype 2
+datatype[23].structtype[0].field[12].detailedtype ""
datatype[23].structtype[0].field[13].name "articlecontinent"
datatype[23].structtype[0].field[13].datatype 2
+datatype[23].structtype[0].field[13].detailedtype ""
datatype[23].structtype[0].field[14].name "sourcerank"
datatype[23].structtype[0].field[14].datatype 0
+datatype[23].structtype[0].field[14].detailedtype ""
datatype[23].structtype[0].field[15].name "crawldate"
datatype[23].structtype[0].field[15].datatype 4
+datatype[23].structtype[0].field[15].detailedtype ""
datatype[23].structtype[0].field[16].name "indexdate"
datatype[23].structtype[0].field[16].datatype 4
+datatype[23].structtype[0].field[16].detailedtype ""
datatype[23].structtype[0].field[17].name "procdate"
datatype[23].structtype[0].field[17].datatype 4
+datatype[23].structtype[0].field[17].detailedtype ""
datatype[23].structtype[0].field[18].name "sourceid"
datatype[23].structtype[0].field[18].datatype 0
+datatype[23].structtype[0].field[18].detailedtype ""
datatype[23].structtype[0].field[19].name "sourcefeedid"
datatype[23].structtype[0].field[19].datatype 0
+datatype[23].structtype[0].field[19].detailedtype ""
datatype[24].id 197293167
datatype[24].structtype[0].name "newsarticle.body"
datatype[24].structtype[0].version 0
@@ -308,6 +382,7 @@ datatype[24].structtype[0].compressthreshold 95
datatype[24].structtype[0].compressminsize 800
datatype[24].structtype[0].field[0].name "body"
datatype[24].structtype[0].field[0].datatype 2
+datatype[24].structtype[0].field[0].detailedtype ""
datatype[25].id -1710661691
datatype[25].documenttype[0].name "newsarticle"
datatype[25].documenttype[0].version 0
diff --git a/config-model/src/test/derived/emptydefault/documentmanager.cfg b/config-model/src/test/derived/emptydefault/documentmanager.cfg
index 4235199342a..9e25ff1c8ec 100644
--- a/config-model/src/test/derived/emptydefault/documentmanager.cfg
+++ b/config-model/src/test/derived/emptydefault/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 461724009
datatype[1].structtype[0].name "emptydefault.header"
datatype[1].structtype[0].version 0
@@ -19,12 +21,16 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "one"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "two"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "rankfeatures"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[1].structtype[0].field[3].name "summaryfeatures"
datatype[1].structtype[0].field[3].datatype 2
+datatype[1].structtype[0].field[3].detailedtype ""
datatype[2].id 311791038
datatype[2].structtype[0].name "emptydefault.body"
datatype[2].structtype[0].version 0
diff --git a/config-model/src/test/derived/id/documentmanager.cfg b/config-model/src/test/derived/id/documentmanager.cfg
index 40996d46399..00ffb00975b 100644
--- a/config-model/src/test/derived/id/documentmanager.cfg
+++ b/config-model/src/test/derived/id/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -531633022
datatype[1].structtype[0].name "id.header"
datatype[1].structtype[0].version 0
@@ -19,10 +21,13 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "uri"
datatype[1].structtype[0].field[0].datatype 10
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "rankfeatures"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "summaryfeatures"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[2].id -1830022377
datatype[2].structtype[0].name "id.body"
datatype[2].structtype[0].version 0
diff --git a/config-model/src/test/derived/indexswitches/documentmanager.cfg b/config-model/src/test/derived/indexswitches/documentmanager.cfg
index 0a32e670d7b..bdc983ebb67 100644
--- a/config-model/src/test/derived/indexswitches/documentmanager.cfg
+++ b/config-model/src/test/derived/indexswitches/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -555640823
datatype[1].structtype[0].name "indexswitches.header"
datatype[1].structtype[0].version 0
@@ -19,16 +21,22 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "title"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "descr"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "source_src"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[1].structtype[0].field[3].name "source"
datatype[1].structtype[0].field[3].datatype 2
+datatype[1].structtype[0].field[3].detailedtype ""
datatype[1].structtype[0].field[4].name "rankfeatures"
datatype[1].structtype[0].field[4].datatype 2
+datatype[1].structtype[0].field[4].detailedtype ""
datatype[1].structtype[0].field[5].name "summaryfeatures"
datatype[1].structtype[0].field[5].datatype 2
+datatype[1].structtype[0].field[5].detailedtype ""
datatype[2].id -1892617122
datatype[2].structtype[0].name "indexswitches.body"
datatype[2].structtype[0].version 0
diff --git a/config-model/src/test/derived/indexswitches/index-info.cfg b/config-model/src/test/derived/indexswitches/index-info.cfg
index 3daf23f8b67..6387551ec98 100644
--- a/config-model/src/test/derived/indexswitches/index-info.cfg
+++ b/config-model/src/test/derived/indexswitches/index-info.cfg
@@ -5,37 +5,37 @@ indexinfo[0].command[1].indexname "sddocname"
indexinfo[0].command[1].command "word"
indexinfo[0].command[2].indexname "title"
indexinfo[0].command[2].command "index"
-indexinfo[0].command[3].indexname "default"
-indexinfo[0].command[3].command "index"
+indexinfo[0].command[3].indexname "title"
+indexinfo[0].command[3].command "lowercase"
indexinfo[0].command[4].indexname "title"
-indexinfo[0].command[4].command "lowercase"
-indexinfo[0].command[5].indexname "default"
-indexinfo[0].command[5].command "lowercase"
-indexinfo[0].command[6].indexname "title"
-indexinfo[0].command[6].command "stem:SHORTEST"
-indexinfo[0].command[7].indexname "default"
-indexinfo[0].command[7].command "stem:SHORTEST"
-indexinfo[0].command[8].indexname "title"
-indexinfo[0].command[8].command "normalize"
-indexinfo[0].command[9].indexname "default"
+indexinfo[0].command[4].command "stem:SHORTEST"
+indexinfo[0].command[5].indexname "title"
+indexinfo[0].command[5].command "normalize"
+indexinfo[0].command[6].indexname "descr"
+indexinfo[0].command[6].command "index"
+indexinfo[0].command[7].indexname "descr"
+indexinfo[0].command[7].command "lowercase"
+indexinfo[0].command[8].indexname "descr"
+indexinfo[0].command[8].command "stem:SHORTEST"
+indexinfo[0].command[9].indexname "descr"
indexinfo[0].command[9].command "normalize"
-indexinfo[0].command[10].indexname "descr"
+indexinfo[0].command[10].indexname "source_src"
indexinfo[0].command[10].command "index"
-indexinfo[0].command[11].indexname "descr"
-indexinfo[0].command[11].command "lowercase"
-indexinfo[0].command[12].indexname "descr"
-indexinfo[0].command[12].command "stem:SHORTEST"
-indexinfo[0].command[13].indexname "descr"
-indexinfo[0].command[13].command "normalize"
-indexinfo[0].command[14].indexname "source_src"
-indexinfo[0].command[14].command "index"
-indexinfo[0].command[15].indexname "rankfeatures"
+indexinfo[0].command[11].indexname "rankfeatures"
+indexinfo[0].command[11].command "index"
+indexinfo[0].command[12].indexname "source"
+indexinfo[0].command[12].command "index"
+indexinfo[0].command[13].indexname "source"
+indexinfo[0].command[13].command "lowercase"
+indexinfo[0].command[14].indexname "source"
+indexinfo[0].command[14].command "normalize"
+indexinfo[0].command[15].indexname "summaryfeatures"
indexinfo[0].command[15].command "index"
-indexinfo[0].command[16].indexname "source"
-indexinfo[0].command[16].command "index"
-indexinfo[0].command[17].indexname "source"
-indexinfo[0].command[17].command "lowercase"
-indexinfo[0].command[18].indexname "source"
-indexinfo[0].command[18].command "normalize"
-indexinfo[0].command[19].indexname "summaryfeatures"
-indexinfo[0].command[19].command "index" \ No newline at end of file
+indexinfo[0].command[16].indexname "default"
+indexinfo[0].command[16].command "lowercase"
+indexinfo[0].command[17].indexname "default"
+indexinfo[0].command[17].command "index"
+indexinfo[0].command[18].indexname "default"
+indexinfo[0].command[18].command "stem:SHORTEST"
+indexinfo[0].command[19].indexname "default"
+indexinfo[0].command[19].command "normalize" \ No newline at end of file
diff --git a/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg b/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg
index 8c51dc52c58..ea0aa3a3e93 100644
--- a/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritfromgrandparent/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 1246084544
datatype[1].structtype[0].name "grandparent_struct"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "grandparent_field"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 990971719
datatype[2].structtype[0].name "grandparent.header"
datatype[2].structtype[0].version 0
@@ -28,8 +31,10 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "rankfeatures"
datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "summaryfeatures"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[3].id 978262812
datatype[3].structtype[0].name "grandparent.body"
datatype[3].structtype[0].version 0
@@ -78,6 +83,7 @@ datatype[8].structtype[0].compressthreshold 95
datatype[8].structtype[0].compressminsize 800
datatype[8].structtype[0].field[0].name "child_field"
datatype[8].structtype[0].field[0].datatype 1246084544
+datatype[8].structtype[0].field[0].detailedtype ""
datatype[9].id -126593034
datatype[9].structtype[0].name "child.body"
datatype[9].structtype[0].version 0
diff --git a/config-model/src/test/derived/inheritfromparent/documentmanager.cfg b/config-model/src/test/derived/inheritfromparent/documentmanager.cfg
index fec59f5ff72..80a9cbcfc3b 100644
--- a/config-model/src/test/derived/inheritfromparent/documentmanager.cfg
+++ b/config-model/src/test/derived/inheritfromparent/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 1091188812
datatype[1].structtype[0].name "parent_struct"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "parent_field"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 836075987
datatype[2].structtype[0].name "parent.header"
datatype[2].structtype[0].version 0
@@ -28,12 +31,16 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "weight_src"
datatype[2].structtype[0].field[0].datatype 1
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "weight"
datatype[2].structtype[0].field[1].datatype 1
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[2].structtype[0].field[2].name "rankfeatures"
datatype[2].structtype[0].field[2].datatype 2
+datatype[2].structtype[0].field[2].detailedtype ""
datatype[2].structtype[0].field[3].name "summaryfeatures"
datatype[2].structtype[0].field[3].datatype 2
+datatype[2].structtype[0].field[3].detailedtype ""
datatype[3].id -389494616
datatype[3].structtype[0].name "parent.body"
datatype[3].structtype[0].version 0
@@ -58,6 +65,7 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "child_field"
datatype[5].structtype[0].field[0].datatype 1091188812
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[6].id -126593034
datatype[6].structtype[0].name "child.body"
datatype[6].structtype[0].version 0
diff --git a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
index 44677776f3c..351ea0d9527 100644
--- a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
@@ -24,6 +24,7 @@ documenttype[0].datatype[0].sstruct.field[0].name "parent_field"
documenttype[0].datatype[0].sstruct.field[0].id 933533022
documenttype[0].datatype[0].sstruct.field[0].id_v6 2116869443
documenttype[0].datatype[0].sstruct.field[0].datatype 2
+documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
documenttype[0].datatype[1].id 836075987
documenttype[0].datatype[1].type STRUCT
documenttype[0].datatype[1].array.element.id 0
@@ -43,18 +44,22 @@ documenttype[0].datatype[1].sstruct.field[0].name "weight_src"
documenttype[0].datatype[1].sstruct.field[0].id 1225660233
documenttype[0].datatype[1].sstruct.field[0].id_v6 1350588470
documenttype[0].datatype[1].sstruct.field[0].datatype 1
+documenttype[0].datatype[1].sstruct.field[0].detailedtype ""
documenttype[0].datatype[1].sstruct.field[1].name "weight"
documenttype[0].datatype[1].sstruct.field[1].id 1001392207
documenttype[0].datatype[1].sstruct.field[1].id_v6 1329620545
documenttype[0].datatype[1].sstruct.field[1].datatype 1
+documenttype[0].datatype[1].sstruct.field[1].detailedtype ""
documenttype[0].datatype[1].sstruct.field[2].name "rankfeatures"
documenttype[0].datatype[1].sstruct.field[2].id 1883197392
documenttype[0].datatype[1].sstruct.field[2].id_v6 699950698
documenttype[0].datatype[1].sstruct.field[2].datatype 2
+documenttype[0].datatype[1].sstruct.field[2].detailedtype ""
documenttype[0].datatype[1].sstruct.field[3].name "summaryfeatures"
documenttype[0].datatype[1].sstruct.field[3].id 1840337115
documenttype[0].datatype[1].sstruct.field[3].id_v6 1981648971
documenttype[0].datatype[1].sstruct.field[3].datatype 2
+documenttype[0].datatype[1].sstruct.field[3].detailedtype ""
documenttype[0].datatype[2].id -389494616
documenttype[0].datatype[2].type STRUCT
documenttype[0].datatype[2].array.element.id 0
@@ -97,6 +102,7 @@ documenttype[1].datatype[0].sstruct.field[0].name "child_field"
documenttype[1].datatype[0].sstruct.field[0].id 1814271363
documenttype[1].datatype[0].sstruct.field[0].id_v6 405182398
documenttype[1].datatype[0].sstruct.field[0].datatype 1091188812
+documenttype[1].datatype[0].sstruct.field[0].detailedtype ""
documenttype[1].datatype[1].id -126593034
documenttype[1].datatype[1].type STRUCT
documenttype[1].datatype[1].array.element.id 0
diff --git a/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg b/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg
index 0e95d51bdd8..0a70b48fe21 100644
--- a/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg
+++ b/config-model/src/test/derived/mail/onlydoc/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -88808602
datatype[1].structtype[0].name "mail.header"
datatype[1].structtype[0].version 0
@@ -19,22 +21,31 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "URI"
datatype[1].structtype[0].field[0].datatype 10
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "mailid"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "date"
datatype[1].structtype[0].field[2].datatype 0
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[1].structtype[0].field[3].name "from"
datatype[1].structtype[0].field[3].datatype 2
+datatype[1].structtype[0].field[3].detailedtype ""
datatype[1].structtype[0].field[4].name "replyto"
datatype[1].structtype[0].field[4].datatype 2
+datatype[1].structtype[0].field[4].detailedtype ""
datatype[1].structtype[0].field[5].name "to"
datatype[1].structtype[0].field[5].datatype 2
+datatype[1].structtype[0].field[5].detailedtype ""
datatype[1].structtype[0].field[6].name "cc"
datatype[1].structtype[0].field[6].datatype 2
+datatype[1].structtype[0].field[6].detailedtype ""
datatype[1].structtype[0].field[7].name "bcc"
datatype[1].structtype[0].field[7].datatype 2
+datatype[1].structtype[0].field[7].detailedtype ""
datatype[1].structtype[0].field[8].name "subject"
datatype[1].structtype[0].field[8].datatype 2
+datatype[1].structtype[0].field[8].detailedtype ""
datatype[2].id -1244861287
datatype[2].arraytype[0].datatype 3
datatype[3].id -953584901
@@ -46,18 +57,25 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "body"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "attachmentcount"
datatype[3].structtype[0].field[1].datatype 0
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[3].structtype[0].field[2].name "attachmentnames"
datatype[3].structtype[0].field[2].datatype 2
+datatype[3].structtype[0].field[2].detailedtype ""
datatype[3].structtype[0].field[3].name "attachmenttypes"
datatype[3].structtype[0].field[3].datatype 2
+datatype[3].structtype[0].field[3].detailedtype ""
datatype[3].structtype[0].field[4].name "attachmentlanguages"
datatype[3].structtype[0].field[4].datatype 2
+datatype[3].structtype[0].field[4].detailedtype ""
datatype[3].structtype[0].field[5].name "attachmentcontent"
datatype[3].structtype[0].field[5].datatype 2
+datatype[3].structtype[0].field[5].detailedtype ""
datatype[3].structtype[0].field[6].name "attachments"
datatype[3].structtype[0].field[6].datatype -1244861287
+datatype[3].structtype[0].field[6].detailedtype ""
datatype[4].id -1081574983
datatype[4].documenttype[0].name "mail"
datatype[4].documenttype[0].version 0
diff --git a/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg b/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg
index 1b51178e6d8..41e39ac52df 100644
--- a/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -739138930
datatype[1].structtype[0].name "prefixexactattribute.header"
datatype[1].structtype[0].version 0
@@ -19,18 +21,25 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "indexfield0"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "attributefield1"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "attributefield2"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[1].structtype[0].field[3].name "indexfield1"
datatype[1].structtype[0].field[3].datatype 2
+datatype[1].structtype[0].field[3].detailedtype ""
datatype[1].structtype[0].field[4].name "indexfield2"
datatype[1].structtype[0].field[4].datatype 2
+datatype[1].structtype[0].field[4].detailedtype ""
datatype[1].structtype[0].field[5].name "rankfeatures"
datatype[1].structtype[0].field[5].datatype 2
+datatype[1].structtype[0].field[5].detailedtype ""
datatype[1].structtype[0].field[6].name "summaryfeatures"
datatype[1].structtype[0].field[6].datatype 2
+datatype[1].structtype[0].field[6].detailedtype ""
datatype[2].id -480519133
datatype[2].structtype[0].name "prefixexactattribute.body"
datatype[2].structtype[0].version 0
diff --git a/config-model/src/test/derived/ranktypes/documentmanager.cfg b/config-model/src/test/derived/ranktypes/documentmanager.cfg
index c57a58c244c..50be09891e5 100644
--- a/config-model/src/test/derived/ranktypes/documentmanager.cfg
+++ b/config-model/src/test/derived/ranktypes/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -471393776
datatype[1].structtype[0].name "ranktypes.header"
datatype[1].structtype[0].version 0
@@ -19,18 +21,25 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "title"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "descr"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "keywords"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[1].structtype[0].field[3].name "identity"
datatype[1].structtype[0].field[3].datatype 2
+datatype[1].structtype[0].field[3].detailedtype ""
datatype[1].structtype[0].field[4].name "identity_literal"
datatype[1].structtype[0].field[4].datatype 2
+datatype[1].structtype[0].field[4].detailedtype ""
datatype[1].structtype[0].field[5].name "rankfeatures"
datatype[1].structtype[0].field[5].datatype 2
+datatype[1].structtype[0].field[5].detailedtype ""
datatype[1].structtype[0].field[6].name "summaryfeatures"
datatype[1].structtype[0].field[6].datatype 2
+datatype[1].structtype[0].field[6].detailedtype ""
datatype[2].id 1374506021
datatype[2].structtype[0].name "ranktypes.body"
datatype[2].structtype[0].version 0
diff --git a/config-model/src/test/derived/streamingstruct/documentmanager.cfg b/config-model/src/test/derived/streamingstruct/documentmanager.cfg
index 306f1102fb1..42826c5be33 100644
--- a/config-model/src/test/derived/streamingstruct/documentmanager.cfg
+++ b/config-model/src/test/derived/streamingstruct/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 105061838
datatype[1].structtype[0].name "ns1"
datatype[1].structtype[0].version 0
@@ -19,10 +21,13 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "nf1"
datatype[1].structtype[0].field[0].datatype 3474528
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "nf1s"
datatype[1].structtype[0].field[1].datatype 3474528
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "nf2"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[2].id 3474528
datatype[2].structtype[0].name "s1"
datatype[2].structtype[0].version 0
@@ -32,12 +37,16 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "f1"
datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "f1s"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[2].structtype[0].field[2].name "f2"
datatype[2].structtype[0].field[2].datatype 0
+datatype[2].structtype[0].field[2].detailedtype ""
datatype[2].structtype[0].field[3].name "f3"
datatype[2].structtype[0].field[3].datatype 5
+datatype[2].structtype[0].field[3].detailedtype ""
datatype[3].id -1497802371
datatype[3].maptype[0].keytype 4
datatype[3].maptype[0].valtype 2
@@ -52,48 +61,70 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "coupleof"
datatype[5].structtype[0].field[0].datatype 2
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[5].structtype[0].field[1].name "normalfields"
datatype[5].structtype[0].field[1].datatype 2
+datatype[5].structtype[0].field[1].detailedtype ""
datatype[5].structtype[0].field[2].name "a"
datatype[5].structtype[0].field[2].datatype 3474528
+datatype[5].structtype[0].field[2].detailedtype ""
datatype[5].structtype[0].field[3].name "m"
datatype[5].structtype[0].field[3].datatype -1497802371
+datatype[5].structtype[0].field[3].detailedtype ""
datatype[5].structtype[0].field[4].name "b"
datatype[5].structtype[0].field[4].datatype 3474528
+datatype[5].structtype[0].field[4].detailedtype ""
datatype[5].structtype[0].field[5].name "c"
datatype[5].structtype[0].field[5].datatype 3474528
+datatype[5].structtype[0].field[5].detailedtype ""
datatype[5].structtype[0].field[6].name "c2"
datatype[5].structtype[0].field[6].datatype 3474528
+datatype[5].structtype[0].field[6].detailedtype ""
datatype[5].structtype[0].field[7].name "c3"
datatype[5].structtype[0].field[7].datatype 3474528
+datatype[5].structtype[0].field[7].detailedtype ""
datatype[5].structtype[0].field[8].name "n"
datatype[5].structtype[0].field[8].datatype 105061838
+datatype[5].structtype[0].field[8].detailedtype ""
datatype[5].structtype[0].field[9].name "array1"
datatype[5].structtype[0].field[9].datatype -1425630723
+datatype[5].structtype[0].field[9].detailedtype ""
datatype[5].structtype[0].field[10].name "array2"
datatype[5].structtype[0].field[10].datatype -1425630723
+datatype[5].structtype[0].field[10].detailedtype ""
datatype[5].structtype[0].field[11].name "array3"
datatype[5].structtype[0].field[11].datatype -1425630723
+datatype[5].structtype[0].field[11].detailedtype ""
datatype[5].structtype[0].field[12].name "subject"
datatype[5].structtype[0].field[12].datatype 3474528
+datatype[5].structtype[0].field[12].detailedtype ""
datatype[5].structtype[0].field[13].name "d"
datatype[5].structtype[0].field[13].datatype 3474528
+datatype[5].structtype[0].field[13].detailedtype ""
datatype[5].structtype[0].field[14].name "e"
datatype[5].structtype[0].field[14].datatype 3474528
+datatype[5].structtype[0].field[14].detailedtype ""
datatype[5].structtype[0].field[15].name "f"
datatype[5].structtype[0].field[15].datatype 3474528
+datatype[5].structtype[0].field[15].detailedtype ""
datatype[5].structtype[0].field[16].name "g"
datatype[5].structtype[0].field[16].datatype 2
+datatype[5].structtype[0].field[16].detailedtype ""
datatype[5].structtype[0].field[17].name "anothersummaryfield"
datatype[5].structtype[0].field[17].datatype 2
+datatype[5].structtype[0].field[17].detailedtype ""
datatype[5].structtype[0].field[18].name "rankfeatures"
datatype[5].structtype[0].field[18].datatype 2
+datatype[5].structtype[0].field[18].detailedtype ""
datatype[5].structtype[0].field[19].name "summaryfeatures"
datatype[5].structtype[0].field[19].datatype 2
+datatype[5].structtype[0].field[19].detailedtype ""
datatype[5].structtype[0].field[20].name "snippet"
datatype[5].structtype[0].field[20].datatype 2
+datatype[5].structtype[0].field[20].detailedtype ""
datatype[5].structtype[0].field[21].name "snippet2"
datatype[5].structtype[0].field[21].datatype 2
+datatype[5].structtype[0].field[21].detailedtype ""
datatype[6].id 1858438651
datatype[6].structtype[0].name "streamingstruct.body"
datatype[6].structtype[0].version 0
diff --git a/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg b/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg
index fc9b0e315b8..d379d862626 100644
--- a/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg
+++ b/config-model/src/test/derived/streamingstruct/onlydoc/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 105061838
datatype[1].structtype[0].name "ns1"
datatype[1].structtype[0].version 0
@@ -19,10 +21,13 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "nf1"
datatype[1].structtype[0].field[0].datatype 3474528
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "nf1s"
datatype[1].structtype[0].field[1].datatype 3474528
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "nf2"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[2].id 3474528
datatype[2].structtype[0].name "s1"
datatype[2].structtype[0].version 0
@@ -32,12 +37,16 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "f1"
datatype[2].structtype[0].field[0].datatype 2
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "f1s"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[2].structtype[0].field[2].name "f2"
datatype[2].structtype[0].field[2].datatype 0
+datatype[2].structtype[0].field[2].detailedtype ""
datatype[2].structtype[0].field[3].name "f3"
datatype[2].structtype[0].field[3].datatype 5
+datatype[2].structtype[0].field[3].detailedtype ""
datatype[3].id -1497802371
datatype[3].maptype[0].keytype 4
datatype[3].maptype[0].valtype 2
@@ -52,38 +61,55 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "coupleof"
datatype[5].structtype[0].field[0].datatype 2
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[5].structtype[0].field[1].name "normalfields"
datatype[5].structtype[0].field[1].datatype 2
+datatype[5].structtype[0].field[1].detailedtype ""
datatype[5].structtype[0].field[2].name "a"
datatype[5].structtype[0].field[2].datatype 3474528
+datatype[5].structtype[0].field[2].detailedtype ""
datatype[5].structtype[0].field[3].name "m"
datatype[5].structtype[0].field[3].datatype -1497802371
+datatype[5].structtype[0].field[3].detailedtype ""
datatype[5].structtype[0].field[4].name "b"
datatype[5].structtype[0].field[4].datatype 3474528
+datatype[5].structtype[0].field[4].detailedtype ""
datatype[5].structtype[0].field[5].name "c"
datatype[5].structtype[0].field[5].datatype 3474528
+datatype[5].structtype[0].field[5].detailedtype ""
datatype[5].structtype[0].field[6].name "c2"
datatype[5].structtype[0].field[6].datatype 3474528
+datatype[5].structtype[0].field[6].detailedtype ""
datatype[5].structtype[0].field[7].name "c3"
datatype[5].structtype[0].field[7].datatype 3474528
+datatype[5].structtype[0].field[7].detailedtype ""
datatype[5].structtype[0].field[8].name "n"
datatype[5].structtype[0].field[8].datatype 105061838
+datatype[5].structtype[0].field[8].detailedtype ""
datatype[5].structtype[0].field[9].name "array1"
datatype[5].structtype[0].field[9].datatype -1425630723
+datatype[5].structtype[0].field[9].detailedtype ""
datatype[5].structtype[0].field[10].name "array2"
datatype[5].structtype[0].field[10].datatype -1425630723
+datatype[5].structtype[0].field[10].detailedtype ""
datatype[5].structtype[0].field[11].name "array3"
datatype[5].structtype[0].field[11].datatype -1425630723
+datatype[5].structtype[0].field[11].detailedtype ""
datatype[5].structtype[0].field[12].name "subject"
datatype[5].structtype[0].field[12].datatype 3474528
+datatype[5].structtype[0].field[12].detailedtype ""
datatype[5].structtype[0].field[13].name "d"
datatype[5].structtype[0].field[13].datatype 3474528
+datatype[5].structtype[0].field[13].detailedtype ""
datatype[5].structtype[0].field[14].name "e"
datatype[5].structtype[0].field[14].datatype 3474528
+datatype[5].structtype[0].field[14].detailedtype ""
datatype[5].structtype[0].field[15].name "f"
datatype[5].structtype[0].field[15].datatype 3474528
+datatype[5].structtype[0].field[15].detailedtype ""
datatype[5].structtype[0].field[16].name "g"
datatype[5].structtype[0].field[16].datatype 2
+datatype[5].structtype[0].field[16].detailedtype ""
datatype[6].id 1858438651
datatype[6].structtype[0].name "streamingstruct.body"
datatype[6].structtype[0].version 0
diff --git a/config-model/src/test/derived/structanyorder/documentmanager.cfg b/config-model/src/test/derived/structanyorder/documentmanager.cfg
index dc56ed1cfc9..b4777f7535f 100755
--- a/config-model/src/test/derived/structanyorder/documentmanager.cfg
+++ b/config-model/src/test/derived/structanyorder/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 109267174
datatype[1].structtype[0].name "sct"
datatype[1].structtype[0].version 0
@@ -19,12 +21,16 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "s1"
datatype[1].structtype[0].field[0].datatype 2
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "s2"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "s3"
datatype[1].structtype[0].field[2].datatype 109267174
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[1].structtype[0].field[3].name "s4"
datatype[1].structtype[0].field[3].datatype 97614088
+datatype[1].structtype[0].field[3].detailedtype ""
datatype[2].id 97614088
datatype[2].structtype[0].name "foo"
datatype[2].structtype[0].version 0
@@ -34,6 +40,7 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "s1"
datatype[2].structtype[0].field[0].datatype 0
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[3].id 517946310
datatype[3].structtype[0].name "annotation.banana"
datatype[3].structtype[0].version 0
@@ -43,8 +50,10 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "b"
datatype[3].structtype[0].field[0].datatype 109267174
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "c"
datatype[3].structtype[0].field[1].datatype 97614088
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[4].id -1244829667
datatype[4].arraytype[0].datatype 109267174
datatype[5].id -364910881
@@ -56,12 +65,16 @@ datatype[5].structtype[0].compressthreshold 95
datatype[5].structtype[0].compressminsize 800
datatype[5].structtype[0].field[0].name "structfield"
datatype[5].structtype[0].field[0].datatype 109267174
+datatype[5].structtype[0].field[0].detailedtype ""
datatype[5].structtype[0].field[1].name "structarrayfield"
datatype[5].structtype[0].field[1].datatype -1244829667
+datatype[5].structtype[0].field[1].detailedtype ""
datatype[5].structtype[0].field[2].name "rankfeatures"
datatype[5].structtype[0].field[2].datatype 2
+datatype[5].structtype[0].field[2].detailedtype ""
datatype[5].structtype[0].field[3].name "summaryfeatures"
datatype[5].structtype[0].field[3].datatype 2
+datatype[5].structtype[0].field[3].detailedtype ""
datatype[6].id -1503592268
datatype[6].structtype[0].name "annotationsimplicitstruct.body"
datatype[6].structtype[0].version 0
diff --git a/config-model/src/test/derived/tensor/attributes.cfg b/config-model/src/test/derived/tensor/attributes.cfg
index a3026d579d5..8819e28b354 100644
--- a/config-model/src/test/derived/tensor/attributes.cfg
+++ b/config-model/src/test/derived/tensor/attributes.cfg
@@ -16,7 +16,7 @@ attribute[0].arity 8
attribute[0].lowerbound -9223372036854775808
attribute[0].upperbound 9223372036854775807
attribute[0].densepostinglistthreshold 0.4
-attribute[0].tensortype ""
+attribute[0].tensortype "tensor(x[2],y[])"
attribute[1].name "f3"
attribute[1].datatype TENSOR
attribute[1].collectiontype SINGLE
@@ -35,7 +35,7 @@ attribute[1].arity 8
attribute[1].lowerbound -9223372036854775808
attribute[1].upperbound 9223372036854775807
attribute[1].densepostinglistthreshold 0.4
-attribute[1].tensortype ""
+attribute[1].tensortype "tensor(x{})"
attribute[2].name "f4"
attribute[2].datatype TENSOR
attribute[2].collectiontype SINGLE
diff --git a/config-model/src/test/derived/tensor/documenttypes.cfg b/config-model/src/test/derived/tensor/documenttypes.cfg
index 2a76458a97a..7c39af767f4 100644
--- a/config-model/src/test/derived/tensor/documenttypes.cfg
+++ b/config-model/src/test/derived/tensor/documenttypes.cfg
@@ -24,26 +24,32 @@ documenttype[0].datatype[0].sstruct.field[0].name "f1"
documenttype[0].datatype[0].sstruct.field[0].id 26661415
documenttype[0].datatype[0].sstruct.field[0].id_v6 1740179945
documenttype[0].datatype[0].sstruct.field[0].datatype 21
+documenttype[0].datatype[0].sstruct.field[2].detailedtype "tensor(x[])"
documenttype[0].datatype[0].sstruct.field[1].name "f2"
documenttype[0].datatype[0].sstruct.field[1].id 2080644671
documenttype[0].datatype[0].sstruct.field[1].id_v6 1424572148
documenttype[0].datatype[0].sstruct.field[1].datatype 21
+documenttype[0].datatype[0].sstruct.field[2].detailedtype "tensor(x[2],y[])"
documenttype[0].datatype[0].sstruct.field[2].name "f3"
documenttype[0].datatype[0].sstruct.field[2].id 1295091863
documenttype[0].datatype[0].sstruct.field[2].id_v6 1444109654
documenttype[0].datatype[0].sstruct.field[2].datatype 21
+documenttype[0].datatype[0].sstruct.field[2].detailedtype "tensor(x{})"
documenttype[0].datatype[0].sstruct.field[3].name "f4"
documenttype[0].datatype[0].sstruct.field[3].id 1224191509
documenttype[0].datatype[0].sstruct.field[3].id_v6 1039544782
documenttype[0].datatype[0].sstruct.field[3].datatype 21
+documenttype[0].datatype[0].sstruct.field[3].detailedtype "tensor(x[],y[])"
documenttype[0].datatype[0].sstruct.field[4].name "rankfeatures"
documenttype[0].datatype[0].sstruct.field[4].id 1883197392
documenttype[0].datatype[0].sstruct.field[4].id_v6 699950698
documenttype[0].datatype[0].sstruct.field[4].datatype 2
+documenttype[0].datatype[0].sstruct.field[4].detailedtype ""
documenttype[0].datatype[0].sstruct.field[5].name "summaryfeatures"
documenttype[0].datatype[0].sstruct.field[5].id 1840337115
documenttype[0].datatype[0].sstruct.field[5].id_v6 1981648971
documenttype[0].datatype[0].sstruct.field[5].datatype 2
+documenttype[0].datatype[0].sstruct.field[5].detailedtype ""
documenttype[0].datatype[1].id -1903234535
documenttype[0].datatype[1].type STRUCT
documenttype[0].datatype[1].array.element.id 0
diff --git a/config-model/src/test/derived/tensor/rank-profiles.cfg b/config-model/src/test/derived/tensor/rank-profiles.cfg
index d70555c9131..d9c6c5088c2 100644
--- a/config-model/src/test/derived/tensor/rank-profiles.cfg
+++ b/config-model/src/test/derived/tensor/rank-profiles.cfg
@@ -1,4 +1,8 @@
rankprofile[].name "default"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
rankprofile[].fef.property[].name "vespa.type.attribute.f4"
rankprofile[].fef.property[].value "tensor(x[10],y[20])"
rankprofile[].name "unranked"
@@ -10,6 +14,10 @@ rankprofile[].fef.property[].name "vespa.hitcollector.arraysize"
rankprofile[].fef.property[].value "0"
rankprofile[].fef.property[].name "vespa.dump.ignoredefaultfeatures"
rankprofile[].fef.property[].value "true"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
rankprofile[].fef.property[].name "vespa.type.attribute.f4"
rankprofile[].fef.property[].value "tensor(x[10],y[20])"
rankprofile[].name "profile1"
@@ -17,6 +25,10 @@ rankprofile[].fef.property[].name "vespa.rank.firstphase"
rankprofile[].fef.property[].value "rankingExpression(firstphase)"
rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
rankprofile[].fef.property[].value "map(attribute(f4), f(x)(x * x)) + reduce(tensor(x[2],y[3])(random), count) * rename(attribute(f4), (x, y), (y, x))"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
rankprofile[].fef.property[].name "vespa.type.attribute.f4"
rankprofile[].fef.property[].value "tensor(x[10],y[20])"
rankprofile[].name "profile2"
@@ -24,5 +36,9 @@ rankprofile[].fef.property[].name "vespa.rank.firstphase"
rankprofile[].fef.property[].value "rankingExpression(firstphase)"
rankprofile[].fef.property[].name "rankingExpression(firstphase).rankingScript"
rankprofile[].fef.property[].value "reduce(join(attribute(f4), tensor(x[2],y[2],z[3])((x==y)*(y==z)), f(a,b)(a * b)), sum, x)"
+rankprofile[].fef.property[].name "vespa.type.attribute.f2"
+rankprofile[].fef.property[].value "tensor(x[2],y[])"
+rankprofile[].fef.property[].name "vespa.type.attribute.f3"
+rankprofile[].fef.property[].value "tensor(x{})"
rankprofile[].fef.property[].name "vespa.type.attribute.f4"
-rankprofile[].fef.property[].value "tensor(x[10],y[20])"
+rankprofile[].fef.property[].value "tensor(x[10],y[20])" \ No newline at end of file
diff --git a/config-model/src/test/derived/tensor/tensor.sd b/config-model/src/test/derived/tensor/tensor.sd
index fab4cafddab..18f1245e0b4 100644
--- a/config-model/src/test/derived/tensor/tensor.sd
+++ b/config-model/src/test/derived/tensor/tensor.sd
@@ -2,16 +2,16 @@
search tensor {
document tensor {
- field f1 type tensor {
+ field f1 type tensor(x[]) {
indexing: summary
}
- field f2 type tensor {
+ field f2 type tensor(x[2],y[]) {
indexing: attribute
}
- field f3 type tensor {
+ field f3 type tensor(x{}) {
indexing: attribute | summary
}
- field f4 type tensor {
+ field f4 type tensor(x[],y[]) {
indexing: attribute
attribute: tensor(x[10],y[20])
}
diff --git a/config-model/src/test/derived/types/attributes.cfg b/config-model/src/test/derived/types/attributes.cfg
index f20562d2a3c..d5679a25ed5 100644
--- a/config-model/src/test/derived/types/attributes.cfg
+++ b/config-model/src/test/derived/types/attributes.cfg
@@ -206,4 +206,4 @@ attribute[10].arity 8
attribute[10].lowerbound -9223372036854775808
attribute[10].upperbound 9223372036854775807
attribute[10].densepostinglistthreshold 0.4
-attribute[10].tensortype ""
+attribute[10].tensortype "" \ No newline at end of file
diff --git a/config-model/src/test/derived/types/documentmanager.cfg b/config-model/src/test/derived/types/documentmanager.cfg
index a2018ffa195..ca9a300ad9c 100644
--- a/config-model/src/test/derived/types/documentmanager.cfg
+++ b/config-model/src/test/derived/types/documentmanager.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -1865479609
datatype[1].maptype[0].keytype 2
datatype[1].maptype[0].valtype 4
@@ -22,12 +24,16 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "Version"
datatype[2].structtype[0].field[0].datatype 0
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "Name"
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[2].structtype[0].field[2].name "FlagsCounter"
datatype[2].structtype[0].field[2].datatype -1865479609
+datatype[2].structtype[0].field[2].detailedtype ""
datatype[2].structtype[0].field[3].name "anotherfolder"
datatype[2].structtype[0].field[3].datatype 294108848
+datatype[2].structtype[0].field[3].detailedtype ""
datatype[3].id 109267174
datatype[3].structtype[0].name "sct"
datatype[3].structtype[0].version 0
@@ -37,8 +43,10 @@ datatype[3].structtype[0].compressthreshold 95
datatype[3].structtype[0].compressminsize 800
datatype[3].structtype[0].field[0].name "s1"
datatype[3].structtype[0].field[0].datatype 2
+datatype[3].structtype[0].field[0].detailedtype ""
datatype[3].structtype[0].field[1].name "s2"
datatype[3].structtype[0].field[1].datatype 2
+datatype[3].structtype[0].field[1].detailedtype ""
datatype[4].id 49942803
datatype[4].arraytype[0].datatype 16
datatype[5].id 339965458
@@ -53,12 +61,16 @@ datatype[6].structtype[0].compressthreshold 95
datatype[6].structtype[0].compressminsize 800
datatype[6].structtype[0].field[0].name "bytearr"
datatype[6].structtype[0].field[0].datatype 49942803
+datatype[6].structtype[0].field[0].detailedtype ""
datatype[6].structtype[0].field[1].name "mymap"
datatype[6].structtype[0].field[1].datatype 339965458
+datatype[6].structtype[0].field[1].detailedtype ""
datatype[6].structtype[0].field[2].name "title"
datatype[6].structtype[0].field[2].datatype 2
+datatype[6].structtype[0].field[2].detailedtype ""
datatype[6].structtype[0].field[3].name "structfield"
datatype[6].structtype[0].field[3].datatype 2
+datatype[6].structtype[0].field[3].detailedtype ""
datatype[7].id -1245117006
datatype[7].arraytype[0].datatype 0
datatype[8].id 1328286588
@@ -115,60 +127,88 @@ datatype[24].structtype[0].compressthreshold 95
datatype[24].structtype[0].compressminsize 800
datatype[24].structtype[0].field[0].name "abyte"
datatype[24].structtype[0].field[0].datatype 16
+datatype[24].structtype[0].field[0].detailedtype ""
datatype[24].structtype[0].field[1].name "along"
datatype[24].structtype[0].field[1].datatype 4
+datatype[24].structtype[0].field[1].detailedtype ""
datatype[24].structtype[0].field[2].name "arrayfield"
datatype[24].structtype[0].field[2].datatype -1245117006
+datatype[24].structtype[0].field[2].detailedtype ""
datatype[24].structtype[0].field[3].name "setfield"
datatype[24].structtype[0].field[3].datatype 1328286588
+datatype[24].structtype[0].field[3].detailedtype ""
datatype[24].structtype[0].field[4].name "setfield2"
datatype[24].structtype[0].field[4].datatype 18
+datatype[24].structtype[0].field[4].detailedtype ""
datatype[24].structtype[0].field[5].name "setfield3"
datatype[24].structtype[0].field[5].datatype 2125328771
+datatype[24].structtype[0].field[5].detailedtype ""
datatype[24].structtype[0].field[6].name "setfield4"
datatype[24].structtype[0].field[6].datatype 2065577986
+datatype[24].structtype[0].field[6].detailedtype ""
datatype[24].structtype[0].field[7].name "tagfield"
datatype[24].structtype[0].field[7].datatype 18
+datatype[24].structtype[0].field[7].detailedtype ""
datatype[24].structtype[0].field[8].name "structfield"
datatype[24].structtype[0].field[8].datatype 109267174
+datatype[24].structtype[0].field[8].detailedtype ""
datatype[24].structtype[0].field[9].name "structarrayfield"
datatype[24].structtype[0].field[9].datatype -1244829667
+datatype[24].structtype[0].field[9].detailedtype ""
datatype[24].structtype[0].field[10].name "stringmapfield"
datatype[24].structtype[0].field[10].datatype 339965458
+datatype[24].structtype[0].field[10].detailedtype ""
datatype[24].structtype[0].field[11].name "intmapfield"
datatype[24].structtype[0].field[11].datatype -1584287606
+datatype[24].structtype[0].field[11].detailedtype ""
datatype[24].structtype[0].field[12].name "floatmapfield"
datatype[24].structtype[0].field[12].datatype 2125154557
+datatype[24].structtype[0].field[12].detailedtype ""
datatype[24].structtype[0].field[13].name "longmapfield"
datatype[24].structtype[0].field[13].datatype -1715531035
+datatype[24].structtype[0].field[13].detailedtype ""
datatype[24].structtype[0].field[14].name "doublemapfield"
datatype[24].structtype[0].field[14].datatype 2138385264
+datatype[24].structtype[0].field[14].detailedtype ""
datatype[24].structtype[0].field[15].name "arraymapfield"
datatype[24].structtype[0].field[15].datatype 435886609
+datatype[24].structtype[0].field[15].detailedtype ""
datatype[24].structtype[0].field[16].name "arrarr"
datatype[24].structtype[0].field[16].datatype -794985308
+datatype[24].structtype[0].field[16].detailedtype ""
datatype[24].structtype[0].field[17].name "maparr"
datatype[24].structtype[0].field[17].datatype 69621385
+datatype[24].structtype[0].field[17].detailedtype ""
datatype[24].structtype[0].field[18].name "mystructfield"
datatype[24].structtype[0].field[18].datatype -2092985853
+datatype[24].structtype[0].field[18].detailedtype ""
datatype[24].structtype[0].field[19].name "mystructmap"
datatype[24].structtype[0].field[19].datatype 1901258752
+datatype[24].structtype[0].field[19].detailedtype ""
datatype[24].structtype[0].field[20].name "mystructarr"
datatype[24].structtype[0].field[20].datatype 759956026
+datatype[24].structtype[0].field[20].detailedtype ""
datatype[24].structtype[0].field[21].name "Folders"
datatype[24].structtype[0].field[21].datatype -389833101
+datatype[24].structtype[0].field[21].detailedtype ""
datatype[24].structtype[0].field[22].name "juletre"
datatype[24].structtype[0].field[22].datatype 4
+datatype[24].structtype[0].field[22].detailedtype ""
datatype[24].structtype[0].field[23].name "album0"
datatype[24].structtype[0].field[23].datatype 18
+datatype[24].structtype[0].field[23].detailedtype ""
datatype[24].structtype[0].field[24].name "album1"
datatype[24].structtype[0].field[24].datatype 18
+datatype[24].structtype[0].field[24].detailedtype ""
datatype[24].structtype[0].field[25].name "other"
datatype[24].structtype[0].field[25].datatype 4
+datatype[24].structtype[0].field[25].detailedtype ""
datatype[24].structtype[0].field[26].name "rankfeatures"
datatype[24].structtype[0].field[26].datatype 2
+datatype[24].structtype[0].field[26].detailedtype ""
datatype[24].structtype[0].field[27].name "summaryfeatures"
datatype[24].structtype[0].field[27].datatype 2
+datatype[24].structtype[0].field[27].detailedtype ""
datatype[25].id 171503364
datatype[25].maptype[0].keytype 1707615575
datatype[25].maptype[0].valtype 0
@@ -183,6 +223,7 @@ datatype[27].structtype[0].compressthreshold 95
datatype[27].structtype[0].compressminsize 800
datatype[27].structtype[0].field[0].name "complexarray"
datatype[27].structtype[0].field[0].datatype 1100964733
+datatype[27].structtype[0].field[0].detailedtype ""
datatype[28].id -853072901
datatype[28].documenttype[0].name "types"
datatype[28].documenttype[0].version 0
diff --git a/config-model/src/test/derived/types/ilscripts.cfg b/config-model/src/test/derived/types/ilscripts.cfg
index cc692e120be..70b799d0df0 100644
--- a/config-model/src/test/derived/types/ilscripts.cfg
+++ b/config-model/src/test/derived/types/ilscripts.cfg
@@ -52,4 +52,4 @@ ilscript[0].content[22] "input mystructfield | passthrough mystructfield"
ilscript[0].content[23] "input mystructmap | passthrough mystructmap"
ilscript[0].content[24] "input stringmapfield | passthrough stringmapfield"
ilscript[0].content[25] "input structarrayfield | passthrough structarrayfield"
-ilscript[0].content[26] "input structfield | passthrough structfield"
+ilscript[0].content[26] "input structfield | passthrough structfield" \ No newline at end of file
diff --git a/config-model/src/test/derived/types/index-info.cfg b/config-model/src/test/derived/types/index-info.cfg
index 4b94127c687..85d4c884571 100644
--- a/config-model/src/test/derived/types/index-info.cfg
+++ b/config-model/src/test/derived/types/index-info.cfg
@@ -424,4 +424,4 @@ indexinfo[0].command[210].command "multivalue"
indexinfo[0].command[211].indexname "rankfeatures"
indexinfo[0].command[211].command "index"
indexinfo[0].command[212].indexname "summaryfeatures"
-indexinfo[0].command[212].command "index"
+indexinfo[0].command[212].command "index" \ No newline at end of file
diff --git a/config-model/src/test/derived/types/summary.cfg b/config-model/src/test/derived/types/summary.cfg
index 6a62dedb851..b1205f45709 100644
--- a/config-model/src/test/derived/types/summary.cfg
+++ b/config-model/src/test/derived/types/summary.cfg
@@ -32,4 +32,4 @@ classes[1].fields[3].type "int64"
classes[1].fields[4].name "rankfeatures"
classes[1].fields[4].type "featuredata"
classes[1].fields[5].name "summaryfeatures"
-classes[1].fields[5].type "featuredata"
+classes[1].fields[5].type "featuredata" \ No newline at end of file
diff --git a/config-model/src/test/derived/types/summarymap.cfg b/config-model/src/test/derived/types/summarymap.cfg
index eac532d966b..8a3ed769213 100644
--- a/config-model/src/test/derived/types/summarymap.cfg
+++ b/config-model/src/test/derived/types/summarymap.cfg
@@ -22,4 +22,4 @@ override[6].command "attribute"
override[6].arguments "other"
override[7].field "juletre"
override[7].command "attribute"
-override[7].arguments "juletre"
+override[7].arguments "juletre" \ No newline at end of file
diff --git a/config-model/src/test/examples/fieldoftypedocument.cfg b/config-model/src/test/examples/fieldoftypedocument.cfg
index 9ce928381ec..d3dd0d06b66 100644
--- a/config-model/src/test/examples/fieldoftypedocument.cfg
+++ b/config-model/src/test/examples/fieldoftypedocument.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id -1344444812
datatype[1].structtype[0].name "book.header"
datatype[1].structtype[0].version 0
@@ -19,10 +21,13 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "soundtrack"
datatype[1].structtype[0].field[0].datatype 1412693671
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[1].structtype[0].field[1].name "rankfeatures"
datatype[1].structtype[0].field[1].datatype 2
+datatype[1].structtype[0].field[1].detailedtype ""
datatype[1].structtype[0].field[2].name "summaryfeatures"
datatype[1].structtype[0].field[2].datatype 2
+datatype[1].structtype[0].field[2].detailedtype ""
datatype[2].id -820813431
datatype[2].structtype[0].name "book.body"
datatype[2].structtype[0].version 0
@@ -47,14 +52,19 @@ datatype[4].structtype[0].compressthreshold 95
datatype[4].structtype[0].compressminsize 800
datatype[4].structtype[0].field[0].name "intfield"
datatype[4].structtype[0].field[0].datatype 0
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[4].structtype[0].field[1].name "stringfield"
datatype[4].structtype[0].field[1].datatype 2
+datatype[4].structtype[0].field[1].detailedtype ""
datatype[4].structtype[0].field[2].name "longfield"
datatype[4].structtype[0].field[2].datatype 4
+datatype[4].structtype[0].field[2].detailedtype ""
datatype[4].structtype[0].field[3].name "rankfeatures"
datatype[4].structtype[0].field[3].datatype 2
+datatype[4].structtype[0].field[3].detailedtype ""
datatype[4].structtype[0].field[4].name "summaryfeatures"
datatype[4].structtype[0].field[4].datatype 2
+datatype[4].structtype[0].field[4].detailedtype ""
datatype[5].id 993120973
datatype[5].structtype[0].name "music.body"
datatype[5].structtype[0].version 0
diff --git a/config-model/src/test/examples/structresult.cfg b/config-model/src/test/examples/structresult.cfg
index addb5f6205c..075ac54b983 100755
--- a/config-model/src/test/examples/structresult.cfg
+++ b/config-model/src/test/examples/structresult.cfg
@@ -8,8 +8,10 @@ datatype[0].structtype[0].compressthreshold 95
datatype[0].structtype[0].compressminsize 800
datatype[0].structtype[0].field[0].name "x"
datatype[0].structtype[0].field[0].datatype 0
+datatype[0].structtype[0].field[0].detailedtype ""
datatype[0].structtype[0].field[1].name "y"
datatype[0].structtype[0].field[1].datatype 0
+datatype[0].structtype[0].field[1].detailedtype ""
datatype[1].id 93505813
datatype[1].structtype[0].name "bar"
datatype[1].structtype[0].version 0
@@ -19,6 +21,7 @@ datatype[1].structtype[0].compressthreshold 95
datatype[1].structtype[0].compressminsize 800
datatype[1].structtype[0].field[0].name "humbe"
datatype[1].structtype[0].field[0].datatype 97614088
+datatype[1].structtype[0].field[0].detailedtype ""
datatype[2].id 97614088
datatype[2].structtype[0].name "foo"
datatype[2].structtype[0].version 0
@@ -28,9 +31,11 @@ datatype[2].structtype[0].compressthreshold 95
datatype[2].structtype[0].compressminsize 800
datatype[2].structtype[0].field[0].name "fubar"
datatype[2].structtype[0].field[0].datatype 0
+datatype[2].structtype[0].field[0].detailedtype ""
datatype[2].structtype[0].field[1].name "bar"
datatype[2].structtype[0].field[1].id[0].id 1
datatype[2].structtype[0].field[1].datatype 2
+datatype[2].structtype[0].field[1].detailedtype ""
datatype[3].id -1245205573
datatype[3].arraytype[0].datatype 97614088
datatype[4].id -1910204744
@@ -42,14 +47,19 @@ datatype[4].structtype[0].compressthreshold 95
datatype[4].structtype[0].compressminsize 800
datatype[4].structtype[0].field[0].name "mystruct"
datatype[4].structtype[0].field[0].datatype 97614088
+datatype[4].structtype[0].field[0].detailedtype ""
datatype[4].structtype[0].field[1].name "arraystruct"
datatype[4].structtype[0].field[1].datatype -1245205573
+datatype[4].structtype[0].field[1].detailedtype ""
datatype[4].structtype[0].field[2].name "advanced"
datatype[4].structtype[0].field[2].datatype 93505813
+datatype[4].structtype[0].field[2].detailedtype ""
datatype[4].structtype[0].field[3].name "rankfeatures"
datatype[4].structtype[0].field[3].datatype 2
+datatype[4].structtype[0].field[3].detailedtype ""
datatype[4].structtype[0].field[4].name "summaryfeatures"
datatype[4].structtype[0].field[4].datatype 2
+datatype[4].structtype[0].field[4].detailedtype ""
datatype[5].id 993120973
datatype[5].structtype[0].name "music.body"
datatype[5].structtype[0].version 0
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/FieldOfTypeDocumentTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/FieldOfTypeDocumentTestCase.java
index 4a3119e55b7..83d5c422fdf 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/FieldOfTypeDocumentTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/FieldOfTypeDocumentTestCase.java
@@ -14,9 +14,10 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
/**
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public class FieldOfTypeDocumentTestCase extends SearchDefinitionTestCase {
+
@Test
public void testDocument() throws IOException, ParseException {
@@ -25,7 +26,7 @@ public class FieldOfTypeDocumentTestCase extends SearchDefinitionTestCase {
sds.add("src/test/examples/fieldoftypedocument.sd");
DocumentmanagerConfig.Builder value = Deriver.getDocumentManagerConfig(sds);
assertConfigFile("src/test/examples/fieldoftypedocument.cfg",
- new DocumentmanagerConfig(value).toString() + "\n");
+ new DocumentmanagerConfig(value).toString() + "\n");
DocumentTypeManager manager = new DocumentTypeManager();
DocumentTypeManagerConfigurer.configure(manager, "raw:" + new DocumentmanagerConfig(value).toString());
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java
index f8fe979c866..5542c1ce5e9 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/NameFieldCheckTestCase.java
@@ -6,14 +6,16 @@ import org.junit.Test;
import java.io.IOException;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+
/**
* Tests that "name" is not allowed as name for a field.
*
* And that duplicate names are not allowed.
*
- * @author <a href="mailto:larschr@yahoo-inc.com">Lars Christian Jensen</a>
+ * @author Lars Christian Jensen
*/
public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
@@ -22,8 +24,8 @@ public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
try {
SearchBuilder.buildFromFile("src/test/examples/name-check.sd");
fail("Should throw exception.");
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception expected) {
+ // Success
}
}
@@ -33,8 +35,7 @@ public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
SearchBuilder.buildFromFile("src/test/examples/duplicatenamesinsearchdifferenttype.sd");
fail("Should throw exception.");
} catch (Exception e) {
- e.printStackTrace();
- assertTrue(e.getMessage().matches(".*Duplicate.*different type.*"));
+ assertEquals("For search 'duplicatenamesinsearch', field 'grpphotoids64': Incompatible types. Expected Array<long> for index field 'grpphotoids64', got string.", e.getMessage());
}
}
@@ -44,7 +45,6 @@ public class NameFieldCheckTestCase extends SearchDefinitionTestCase {
SearchBuilder.buildFromFile("src/test/examples/duplicatenamesindoc.sd");
fail("Should throw exception.");
} catch (Exception e) {
- e.printStackTrace();
assertTrue(e.getMessage().matches(".*Duplicate.*"));
}
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
index ae3b775f13d..b2968eb4a85 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
@@ -102,9 +102,9 @@ public class RankProfileTestCase extends SearchDefinitionTestCase {
SearchBuilder builder = new SearchBuilder(registry);
builder.importString("search test {\n" +
" document test { \n" +
- " field a type tensor { indexing: attribute \n attribute: tensor(x[10]) }\n" +
- " field b type tensor { indexing: attribute \n attribute: tensor(y{}) }\n" +
- " field c type tensor { indexing: attribute }\n" +
+ " field a type tensor(x[]) { indexing: attribute \n attribute: tensor(x[10]) }\n" +
+ " field b type tensor(y{}) { indexing: attribute \n attribute: tensor(y{}) }\n" +
+ " field c type tensor(x[]) { indexing: attribute }\n" +
" }\n" +
" rank-profile p1 {}\n" +
" rank-profile p2 {}\n" +
@@ -123,7 +123,7 @@ public class RankProfileTestCase extends SearchDefinitionTestCase {
RawRankProfile rawProfile = new RawRankProfile(profile, new AttributeFields(search));
assertEquals("tensor(x[10])", findProperty(rawProfile.configProperties(), "vespa.type.attribute.a").get());
assertEquals("tensor(y{})", findProperty(rawProfile.configProperties(), "vespa.type.attribute.b").get());
- assertFalse(findProperty(rawProfile.configProperties(), "vespa.type.attribute.c").isPresent());
+ assertEquals("tensor(x[])", findProperty(rawProfile.configProperties(), "vespa.type.attribute.c").get());
}
@Test
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java
index c33ebc95bd2..3236be983d8 100755
--- a/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/StructTestCase.java
@@ -10,26 +10,28 @@ import java.io.IOException;
import static org.junit.Assert.fail;
/**
- * tests importing of document containing array type fields
+ * Tests importing of document containing array type fields
*
* @author bratseth
*/
public class StructTestCase extends SearchDefinitionTestCase {
+
@Test
public void testStruct() throws IOException, ParseException {
assertConfigFile("src/test/examples/structresult.cfg",
- new DocumentmanagerConfig(Deriver.getDocumentManagerConfig("src/test/examples/struct.sd")).toString() + "\n");
+ new DocumentmanagerConfig(Deriver.getDocumentManagerConfig("src/test/examples/struct.sd")).toString() + "\n");
}
+
@Test
public void testBadStruct() throws IOException {
try {
SearchBuilder.buildFromFile("src/test/examples/badstruct.sd");
fail("Should throw exception.");
- } catch (ParseException e) {
- //ok!
- //e.printStackTrace();
+ } catch (ParseException expected) {
+ // success
}
}
+
@Test
public void testStructAndDocumentWithSameNames() throws IOException, ParseException {
try {
@@ -41,8 +43,6 @@ public class StructTestCase extends SearchDefinitionTestCase {
/**
* Declaring a struct before a document will fail, no doc type to add it to.
- * @throws IOException
- * @throws ParseException
*/
@Test(expected = IllegalArgumentException.class)
public void testStructOutsideDocumentIllegal() throws IOException, ParseException {
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java
index ecadf8e1b71..0007019e6b4 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java
@@ -19,28 +19,28 @@ public class TensorFieldTestCase {
public void requireThatTensorFieldCannotBeOfCollectionType() throws ParseException {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("For search 'test', field 'f1': A field with collection type of tensor is not supported. Use simple type 'tensor' instead.");
- SearchBuilder.createFromString(getSd("field f1 type array<tensor> {}"));
+ SearchBuilder.createFromString(getSd("field f1 type array<tensor(x{})> {}"));
}
@Test
public void requireThatTensorFieldCannotBeIndexField() throws ParseException {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("For search 'test', field 'f1': A field of type 'tensor' cannot be specified as an 'index' field.");
- SearchBuilder.createFromString(getSd("field f1 type tensor { indexing: index }"));
+ SearchBuilder.createFromString(getSd("field f1 type tensor(x{}) { indexing: index }"));
}
@Test
public void requireThatTensorAttributeCannotBeFastSearch() throws ParseException {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("For search 'test', field 'f1': An attribute of type 'tensor' cannot be 'fast-search'.");
- SearchBuilder.createFromString(getSd("field f1 type tensor { indexing: attribute \n attribute: fast-search }"));
+ SearchBuilder.createFromString(getSd("field f1 type tensor(x{}) { indexing: attribute \n attribute: fast-search }"));
}
@Test
public void requireThatIllegalTensorTypeSpecThrowsException() throws ParseException {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("For attribute field 'f1': Illegal tensor type spec: Failed parsing element 'invalid' in type spec 'tensor(invalid)'");
- SearchBuilder.createFromString(getSd("field f1 type tensor { indexing: attribute \n attribute: tensor(invalid) }"));
+ SearchBuilder.createFromString(getSd("field f1 type tensor(x{}) { indexing: attribute \n attribute: tensor(invalid) }"));
}
private static String getSd(String field) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidatorTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidatorTestCase.java
index 8c1a288c46d..a8b4065ef38 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidatorTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/SearchDataTypeValidatorTestCase.java
@@ -8,7 +8,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
/**
- * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a>
+ * @author Simon Thoresen
*/
public class SearchDataTypeValidatorTestCase {
@@ -37,4 +37,5 @@ public class SearchDataTypeValidatorTestCase {
"'simple' for cluster 'content').", e.getMessage());
}
}
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java
index b3ef8c6d7f2..e43827d7693 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java
@@ -9,6 +9,7 @@ import java.util.List;
import static com.yahoo.vespa.model.application.validation.change.ConfigChangeTestUtils.newRefeedAction;
import static com.yahoo.vespa.model.application.validation.change.ConfigChangeTestUtils.newRestartAction;
+import static org.junit.Assert.assertEquals;
public class AttributeChangeValidatorTest {
@@ -110,8 +111,8 @@ public class AttributeChangeValidatorTest {
@Test
public void requireThatChangingTensorTypeOfTensorFieldRequiresRefeed() throws Exception {
new Fixture(
- "field f1 type tensor { indexing: attribute \n attribute: tensor(x[100]) }",
- "field f1 type tensor { indexing: attribute \n attribute: tensor(y[]) }")
+ "field f1 type tensor(x[]) { indexing: attribute \n attribute: tensor(x[100]) }",
+ "field f1 type tensor(y[]) { indexing: attribute \n attribute: tensor(y[]) }")
.assertValidation(newRefeedAction(
"tensor-type-change",
ValidationOverrides.empty(),
@@ -119,10 +120,24 @@ public class AttributeChangeValidatorTest {
}
@Test
- public void requireThatNotChangingTensorTypeOfTensorFieldIsOk() throws Exception {
+ public void requireThatCompatibleTensorTypeChangeIsOk() throws Exception {
new Fixture(
- "field f1 type tensor { indexing: attribute \n attribute: tensor(x[104], y[52]) }",
- "field f1 type tensor { indexing: attribute \n attribute: tensor(x[104], y[52]) }")
+ "field f1 type tensor(x[],y[]) { indexing: attribute \n attribute: tensor(x[104], y[52]) }",
+ "field f1 type tensor(x[200],y[]) { indexing: attribute \n attribute: tensor(x[104], y[52]) }")
.assertValidation();
}
+
+ @Test
+ public void requireIncompatibleTensorTypeChangeIsNotOk() throws Exception {
+ try {
+ new Fixture(
+ "field f1 type tensor(x[],y[]) { indexing: attribute \n attribute: tensor(x[104], y[52]) }",
+ "field f1 type tensor(x[100],y[]) { indexing: attribute \n attribute: tensor(x[104], y[52]) }")
+ .assertValidation();
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("For search 'test', field 'f1': Incompatible types. Expected tensor(x[100],y[]) for attribute 'f1', got tensor(x[104],y[52]).", e.getMessage());
+ }
+ }
+
}