summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-03-23 17:03:28 +0100
committerGitHub <noreply@github.com>2021-03-23 17:03:28 +0100
commitf8cf0739f35de7b8da799e5206421ec5dc66df49 (patch)
tree9820da3e8def61610631d1ca4e978a10471cc50f
parent2da65b6a987716d59a27a720a03f34fc6c9a596b (diff)
parentf86aedaee7c84fff85bd97099b7e08db3e4d5313 (diff)
Merge pull request #17122 from vespa-engine/balder/orderting-2-type
Balder/orderting 2 type
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java17
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/Attribute.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/Dictionary.java16
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java10
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/AttributeOperation.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/DictionaryOperation.java35
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/DictionaryProcessor.java41
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java2
-rw-r--r--config-model/src/main/javacc/SDParser.jj32
-rw-r--r--config-model/src/test/derived/advanced/attributes.cfg1
-rw-r--r--config-model/src/test/derived/array_of_struct_attribute/attributes.cfg2
-rw-r--r--config-model/src/test/derived/attributeprefetch/attributes.cfg18
-rw-r--r--config-model/src/test/derived/attributes/attributes.cfg18
-rw-r--r--config-model/src/test/derived/complex/attributes.cfg9
-rw-r--r--config-model/src/test/derived/hnsw_index/attributes.cfg2
-rw-r--r--config-model/src/test/derived/imported_fields_inherited_reference/attributes.cfg4
-rw-r--r--config-model/src/test/derived/imported_position_field/attributes.cfg2
-rw-r--r--config-model/src/test/derived/imported_struct_fields/attributes.cfg8
-rw-r--r--config-model/src/test/derived/importedfields/attributes.cfg8
-rw-r--r--config-model/src/test/derived/inheritance/attributes.cfg3
-rw-r--r--config-model/src/test/derived/inheritfromparent/attributes.cfg1
-rw-r--r--config-model/src/test/derived/map_attribute/attributes.cfg3
-rw-r--r--config-model/src/test/derived/map_of_struct_attribute/attributes.cfg5
-rw-r--r--config-model/src/test/derived/music/attributes.cfg11
-rw-r--r--config-model/src/test/derived/newrank/attributes.cfg10
-rw-r--r--config-model/src/test/derived/predicate_attribute/attributes.cfg1
-rw-r--r--config-model/src/test/derived/prefixexactattribute/attributes.cfg2
-rw-r--r--config-model/src/test/derived/reference_fields/attributes.cfg3
-rw-r--r--config-model/src/test/derived/sorting/attributes.cfg3
-rw-r--r--config-model/src/test/derived/tensor/attributes.cfg5
-rw-r--r--config-model/src/test/derived/types/attributes.cfg13
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/DictionaryTestCase.java125
-rw-r--r--configdefinitions/src/vespa/attributes.def2
-rw-r--r--searchcommon/src/tests/attribute/config/attribute_config_test.cpp34
-rw-r--r--searchcommon/src/vespa/searchcommon/common/dictionary_config.cpp12
-rw-r--r--searchcommon/src/vespa/searchcommon/common/dictionary_config.h12
-rw-r--r--searchlib/src/tests/attribute/enum_comparator/enum_comparator_test.cpp18
-rw-r--r--searchlib/src/tests/attribute/enumstore/enumstore_test.cpp38
-rw-r--r--searchlib/src/vespa/searchlib/attribute/configconverter.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumattribute.hpp2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumstore.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumstore.h8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/enumstore.hpp4
46 files changed, 507 insertions, 84 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
index 3e421f9ba05..4a415fccbcc 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
@@ -6,6 +6,7 @@ import com.yahoo.document.DataType;
import com.yahoo.document.PositionDataType;
import com.yahoo.searchdefinition.Search;
import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.Dictionary;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.searchdefinition.document.Ranking;
import com.yahoo.searchdefinition.document.Sorting;
@@ -251,9 +252,25 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
ib.hnsw.multithreadedindexing(params.multiThreadedIndexing());
aaB.index(ib);
}
+ Dictionary dictionary = attribute.getDictionary();
+ if (dictionary != null) {
+ aaB.dictionary.type(convert(dictionary.getType()));
+ }
return aaB;
}
+ private static AttributesConfig.Attribute.Dictionary.Type.Enum convert(Dictionary.Type type) {
+ switch (type) {
+ case BTREE:
+ return AttributesConfig.Attribute.Dictionary.Type.BTREE;
+ case HASH:
+ return AttributesConfig.Attribute.Dictionary.Type.HASH;
+ case BTREE_AND_HASH:
+ return AttributesConfig.Attribute.Dictionary.Type.BTREE_AND_HASH;
+ }
+ return AttributesConfig.Attribute.Dictionary.Type.BTREE;
+ }
+
public void getConfig(AttributesConfig.Builder builder, FieldSet fs) {
for (Attribute attribute : attributes.values()) {
if (isAttributeInFieldSet(attribute, fs)) {
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 8cf862a72af..f230a7c10eb 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
@@ -78,6 +78,8 @@ public final class Attribute implements Cloneable, Serializable {
/** The aliases for this attribute */
private final Set<String> aliases = new LinkedHashSet<>();
+ private Dictionary dictionary = new Dictionary();
+
/**
* True if this attribute should be returned during first pass of search.
* Null means make the default decision for this kind of attribute
@@ -208,6 +210,7 @@ public final class Attribute implements Cloneable, Serializable {
public Optional<HnswIndexParams> hnswIndexParams() { return hnswIndexParams; }
public Sorting getSorting() { return sorting; }
+ public Dictionary getDictionary() { return dictionary; }
public void setRemoveIfZero(boolean remove) { this.removeIfZero = remove; }
public void setCreateIfNonExistent(boolean create) { this.createIfNonExistent = create; }
@@ -231,6 +234,7 @@ public final class Attribute implements Cloneable, Serializable {
public void setTensorType(TensorType tensorType) { this.tensorType = Optional.of(tensorType); }
public void setDistanceMetric(DistanceMetric metric) { this.distanceMetric = Optional.of(metric); }
public void setHnswIndexParams(HnswIndexParams params) { this.hnswIndexParams = Optional.of(params); }
+ public void setDictionary(Dictionary dictionary) { this.dictionary = dictionary; }
public String getName() { return name; }
public Type getType() { return type; }
@@ -348,7 +352,7 @@ public final class Attribute implements Cloneable, Serializable {
@Override
public int hashCode() {
return Objects.hash(
- name, type, collectionType, sorting, isPrefetch(), fastAccess, removeIfZero, createIfNonExistent,
+ name, type, collectionType, sorting, dictionary, isPrefetch(), fastAccess, removeIfZero, createIfNonExistent,
isPosition, huge, enableBitVectors, enableOnlyBitVector, tensorType, referenceDocumentType, distanceMetric, hnswIndexParams);
}
@@ -370,10 +374,10 @@ public final class Attribute implements Cloneable, Serializable {
if (this.createIfNonExistent != other.createIfNonExistent) return false;
if (this.enableBitVectors != other.enableBitVectors) return false;
if (this.enableOnlyBitVector != other.enableOnlyBitVector) return false;
- // if (this.noSearch != other.noSearch) return false; No backend consequences so compatible for now
if (this.fastSearch != other.fastSearch) return false;
if (this.huge != other.huge) return false;
if (! this.sorting.equals(other.sorting)) return false;
+ if (! Objects.equals(dictionary, other.dictionary)) return false;
if (! Objects.equals(tensorType, other.tensorType)) return false;
if (! Objects.equals(referenceDocumentType, other.referenceDocumentType)) return false;
if (! Objects.equals(distanceMetric, other.distanceMetric)) return false;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/Dictionary.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/Dictionary.java
new file mode 100644
index 00000000000..e492d572f27
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/Dictionary.java
@@ -0,0 +1,16 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.searchdefinition.document;
+
+/**
+ * Represents settings for dictionary control
+ *
+ * @author baldersheim
+ */
+public class Dictionary {
+ public enum Type { BTREE, HASH, BTREE_AND_HASH };
+ private final Type type;
+ public Dictionary() { this(Type.BTREE); }
+ public Dictionary(Type type) { this.type = type; }
+ public Type getType() { return type; }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
index d81394382c2..76b707fa19b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
@@ -80,6 +80,8 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
*/
private Matching matching = new Matching();
+ private Dictionary dictionary = null;
+
/** Attribute settings, or null if there are none */
private final Map<String, Attribute> attributes = new TreeMap<>();
@@ -533,6 +535,14 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
public void setMatching(Matching matching) { this.matching=matching; }
/**
+ * Returns Dictionary settings.
+ */
+ public Dictionary getDictionary() { return dictionary; }
+
+
+ public void setDictionary(Dictionary dictionary) { this.dictionary=dictionary; }
+
+ /**
* Set the matching type for this field and all subfields.
*/
// TODO: When this is not the same as getMatching().setthis we have a potential for inconsistency. Find the right
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/AttributeOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/AttributeOperation.java
index b638932a4a8..56e241adb8e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/AttributeOperation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/AttributeOperation.java
@@ -90,10 +90,6 @@ public class AttributeOperation implements FieldOperation, FieldOperationContain
this.enableOnlyBitVector = enableOnlyBitVector;
}
- public boolean isDoAlias() {
- return doAlias;
- }
-
public void setDoAlias(boolean doAlias) {
this.doAlias = doAlias;
}
@@ -106,9 +102,6 @@ public class AttributeOperation implements FieldOperation, FieldOperationContain
this.alias = alias;
}
- public String getAliasedName() {
- return aliasedName;
- }
public void setAliasedName(String aliasedName) {
this.aliasedName = aliasedName;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/DictionaryOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/DictionaryOperation.java
new file mode 100644
index 00000000000..ce7c5a71a21
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/DictionaryOperation.java
@@ -0,0 +1,35 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.searchdefinition.fieldoperation;
+
+import com.yahoo.searchdefinition.document.Dictionary;
+import com.yahoo.searchdefinition.document.SDField;
+
+/**
+ * Represents operations controlling setup of dictionary used for queries
+ *
+ * @author baldersheim
+ */
+public class DictionaryOperation implements FieldOperation {
+ private final Dictionary.Type type;
+
+ public DictionaryOperation(Dictionary.Type type) {
+ this.type = type;
+ }
+ @Override
+ public void apply(SDField field) {
+ Dictionary prev = field.getDictionary();
+ if (prev == null) {
+ field.setDictionary(new Dictionary(type));
+ } else if ((prev.getType() == Dictionary.Type.BTREE && type == Dictionary.Type.HASH) ||
+ (prev.getType() == Dictionary.Type.HASH && type == Dictionary.Type.BTREE))
+ {
+ field.setDictionary(new Dictionary(Dictionary.Type.BTREE_AND_HASH));
+ } else {
+ if (prev.getType() != type) {
+ throw new IllegalArgumentException("Can not combine previous dictionary setting " + prev.getType() +
+ " with current " + type);
+ }
+ }
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/DictionaryProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DictionaryProcessor.java
new file mode 100644
index 00000000000..92ceb8e5e44
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/DictionaryProcessor.java
@@ -0,0 +1,41 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.document.NumericDataType;
+import com.yahoo.searchdefinition.RankProfileRegistry;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.searchdefinition.document.Dictionary;
+import com.yahoo.searchdefinition.document.SDField;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+
+/**
+ * Propagates dictionary settings from field level to attribute level.
+ * Only applies to numeric fields with fast-search enabled.
+ *
+ * @author baldersheim
+ */
+public class DictionaryProcessor extends Processor {
+ public DictionaryProcessor(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+ super(search, deployLogger, rankProfileRegistry, queryProfiles);
+ }
+ @Override
+ public void process(boolean validate, boolean documentsOnly) {
+ for (SDField field : search.allConcreteFields()) {
+ Dictionary dictionary = field.getDictionary();
+ if (dictionary == null) continue;
+
+ Attribute attribute = field.getAttribute();
+ if (attribute.getDataType() instanceof NumericDataType ) {
+ if (attribute.isFastSearch()) {
+ attribute.setDictionary(dictionary);
+ } else {
+ fail(search, field, "You must specify 'attribute:fast-search' to allow dictionary control");
+ }
+ } else {
+ fail(search, field, "You can only specify 'dictionary:' for numeric fields");
+ }
+ }
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java
index 79f19efe422..ff0edcd0404 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/PredicateProcessor.java
@@ -15,7 +15,13 @@ import com.yahoo.vespa.documentmodel.DocumentSummary;
import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.documentmodel.SummaryTransform;
import com.yahoo.vespa.indexinglanguage.ExpressionConverter;
-import com.yahoo.vespa.indexinglanguage.expressions.*;
+import com.yahoo.vespa.indexinglanguage.expressions.Expression;
+import com.yahoo.vespa.indexinglanguage.expressions.OptimizePredicateExpression;
+import com.yahoo.vespa.indexinglanguage.expressions.OutputExpression;
+import com.yahoo.vespa.indexinglanguage.expressions.ScriptExpression;
+import com.yahoo.vespa.indexinglanguage.expressions.SetValueExpression;
+import com.yahoo.vespa.indexinglanguage.expressions.SetVarExpression;
+import com.yahoo.vespa.indexinglanguage.expressions.StatementExpression;
import com.yahoo.vespa.model.container.search.QueryProfiles;
import java.util.ArrayList;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index 1a3ef9e54b4..136d352ece7 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -37,6 +37,7 @@ public class Processing {
AttributesImplicitWord::new,
MutableAttributes::new,
CreatePositionZCurve::new,
+ DictionaryProcessor::new,
WordMatch::new,
ImportedFieldsResolver::new,
ImplicitSummaries::new,
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java
index 3744af7cc2c..61b5e6f2a64 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processor.java
@@ -25,7 +25,7 @@ import java.util.logging.Level;
public abstract class Processor {
protected final Search search;
- protected DeployLogger deployLogger;
+ protected final DeployLogger deployLogger;
protected final RankProfileRegistry rankProfileRegistry;
protected final QueryProfiles queryProfiles;
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 869f671d8ef..2607b2fb02b 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -252,6 +252,7 @@ TOKEN :
| < PROPERTIES: "properties" >
| < ATTRIBUTE: "attribute" >
| < SORTING: "sorting" >
+| < DICTIONARY: "dictionary" >
| < ASCENDING: "ascending" >
| < DESCENDING: "descending" >
| < UCA: "uca" >
@@ -267,6 +268,8 @@ TOKEN :
| < IDENTICAL: "identical" >
| < STEMMING: "stemming" >
| < NORMALIZING: "normalizing" >
+| < HASH: "hash" >
+| < BTREE: "btree" >
| < BOLDING: "bolding" >
| < BODY: "body" >
| < HEADER: "header" >
@@ -987,6 +990,7 @@ String fieldBody(SDField field, Search search, SDDocumentType document) : { }
attribute(field) |
body(field) |
bolding(field) |
+ dictionary(field) |
fieldStemming(field) |
header(field) |
id(field, document) |
@@ -1520,6 +1524,34 @@ void bolding(FieldOperationContainer field) :
}
/**
+ * This rule consumes a dictionary statement of a field element.
+ *
+ * @param field The field to modify.
+ */
+void dictionary(FieldOperationContainer field) :
+{
+ Dictionary.Type type;
+}
+{
+ <DICTIONARY> <COLON> type = dictionaryType()
+ {
+ field.addOperation(new DictionaryOperation(type));
+ }
+}
+
+Dictionary.Type dictionaryType() :
+{
+ Dictionary.Type type;
+}
+{
+ ( <HASH> { type = Dictionary.Type.HASH; }
+ | <BTREE> { type = Dictionary.Type.BTREE; } )
+ {
+ return type;
+ }
+}
+
+/**
* This rule consumes a body statement of a field element.
*
* @param field The field to modify.
diff --git a/config-model/src/test/derived/advanced/attributes.cfg b/config-model/src/test/derived/advanced/attributes.cfg
index 0d4b3bc4ca7..641e2d8fde5 100644
--- a/config-model/src/test/derived/advanced/attributes.cfg
+++ b/config-model/src/test/derived/advanced/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "location_zcurve"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
diff --git a/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg b/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
index dc269284e8f..bb4ba665406 100644
--- a/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
+++ b/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "elem_array.name"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -30,6 +31,7 @@ attribute[].name "elem_array.weight"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/attributeprefetch/attributes.cfg b/config-model/src/test/derived/attributeprefetch/attributes.cfg
index c43e38d0561..d05d2d1d5e0 100644
--- a/config-model/src/test/derived/attributeprefetch/attributes.cfg
+++ b/config-model/src/test/derived/attributeprefetch/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "singlebyte"
attribute[].datatype INT8
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "multibyte"
attribute[].datatype INT8
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "wsbyte"
attribute[].datatype INT8
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "singleint"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "multiint"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "wsint"
attribute[].datatype INT32
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "singlelong"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "multilong"
attribute[].datatype INT64
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -226,6 +234,7 @@ attribute[].name "wslong"
attribute[].datatype INT64
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -254,6 +263,7 @@ attribute[].name "singlefloat"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -282,6 +292,7 @@ attribute[].name "multifloat"
attribute[].datatype FLOAT
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -310,6 +321,7 @@ attribute[].name "wsfloat"
attribute[].datatype FLOAT
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -338,6 +350,7 @@ attribute[].name "singledouble"
attribute[].datatype DOUBLE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -366,6 +379,7 @@ attribute[].name "multidouble"
attribute[].datatype DOUBLE
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -394,6 +408,7 @@ attribute[].name "wsdouble"
attribute[].datatype DOUBLE
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -422,6 +437,7 @@ attribute[].name "singlestring"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -450,6 +466,7 @@ attribute[].name "multistring"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -478,6 +495,7 @@ attribute[].name "wsstring"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/attributes/attributes.cfg b/config-model/src/test/derived/attributes/attributes.cfg
index 4ecb0c2af8f..e9f3f68adc1 100644
--- a/config-model/src/test/derived/attributes/attributes.cfg
+++ b/config-model/src/test/derived/attributes/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "a1"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "a2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "a3"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "a5"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "a6"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "b1"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "b2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "b3"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -226,6 +234,7 @@ attribute[].name "b4"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -254,6 +263,7 @@ attribute[].name "b5"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -282,6 +292,7 @@ attribute[].name "b6"
attribute[].datatype INT64
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -310,6 +321,7 @@ attribute[].name "b7"
attribute[].datatype DOUBLE
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -338,6 +350,7 @@ attribute[].name "a9"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -366,6 +379,7 @@ attribute[].name "a10"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -394,6 +408,7 @@ attribute[].name "a11"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -422,6 +437,7 @@ attribute[].name "a12"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -450,6 +466,7 @@ attribute[].name "a7_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -478,6 +495,7 @@ attribute[].name "a8_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/complex/attributes.cfg b/config-model/src/test/derived/complex/attributes.cfg
index fe6f42e55bc..622fb9f349c 100644
--- a/config-model/src/test/derived/complex/attributes.cfg
+++ b/config-model/src/test/derived/complex/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "prefixenabled"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "fleeting"
attribute[].datatype FLOAT
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "fleeting2"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "foundat"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "collapseby"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "ts"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "combineda"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "year_arr"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -226,6 +234,7 @@ attribute[].name "year_sub"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/hnsw_index/attributes.cfg b/config-model/src/test/derived/hnsw_index/attributes.cfg
index 53eb98b6ba8..4d275787bfd 100644
--- a/config-model/src/test/derived/hnsw_index/attributes.cfg
+++ b/config-model/src/test/derived/hnsw_index/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "t1"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "t2"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/imported_fields_inherited_reference/attributes.cfg b/config-model/src/test/derived/imported_fields_inherited_reference/attributes.cfg
index 2c209db96f2..bfdf90ac12c 100644
--- a/config-model/src/test/derived/imported_fields_inherited_reference/attributes.cfg
+++ b/config-model/src/test/derived/imported_fields_inherited_reference/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "ref_from_a"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "ref_from_b"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "from_a_int_field"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "from_b_int_field"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/imported_position_field/attributes.cfg b/config-model/src/test/derived/imported_position_field/attributes.cfg
index 5bb0d9bfef3..f1b20c6e454 100644
--- a/config-model/src/test/derived/imported_position_field/attributes.cfg
+++ b/config-model/src/test/derived/imported_position_field/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "parent_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "my_pos_zcurve"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
diff --git a/config-model/src/test/derived/imported_struct_fields/attributes.cfg b/config-model/src/test/derived/imported_struct_fields/attributes.cfg
index f299756efb1..9e0b5f18170 100644
--- a/config-model/src/test/derived/imported_struct_fields/attributes.cfg
+++ b/config-model/src/test/derived/imported_struct_fields/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "parent_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "my_elem_array.name"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -58,6 +60,7 @@ attribute[].name "my_elem_array.weight"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "my_elem_map.key"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -114,6 +118,7 @@ attribute[].name "my_elem_map.value.name"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -142,6 +147,7 @@ attribute[].name "my_elem_map.value.weight"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "my_str_int_map.key"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -198,6 +205,7 @@ attribute[].name "my_str_int_map.value"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/importedfields/attributes.cfg b/config-model/src/test/derived/importedfields/attributes.cfg
index 680d6571939..68cd917336f 100644
--- a/config-model/src/test/derived/importedfields/attributes.cfg
+++ b/config-model/src/test/derived/importedfields/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "a_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "b_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "b_ref_with_summary"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "my_int_field"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "my_string_field"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "my_int_array_field"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "my_int_wset_field"
attribute[].datatype INT32
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "my_ancient_int_field"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/inheritance/attributes.cfg b/config-model/src/test/derived/inheritance/attributes.cfg
index 52367a04a30..a931af7af4d 100644
--- a/config-model/src/test/derived/inheritance/attributes.cfg
+++ b/config-model/src/test/derived/inheritance/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "onlygrandparent"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "overridden"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "onlymother"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/inheritfromparent/attributes.cfg b/config-model/src/test/derived/inheritfromparent/attributes.cfg
index b25a46dc433..11498de54b1 100644
--- a/config-model/src/test/derived/inheritfromparent/attributes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "weight"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/map_attribute/attributes.cfg b/config-model/src/test/derived/map_attribute/attributes.cfg
index d9624e89500..acbdf119d0d 100644
--- a/config-model/src/test/derived/map_attribute/attributes.cfg
+++ b/config-model/src/test/derived/map_attribute/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "str_map.key"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -30,6 +31,7 @@ attribute[].name "str_map.value"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "int_map.key"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg b/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
index 5fd10269ceb..ecc8c2fd69d 100644
--- a/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
+++ b/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "str_elem_map.key"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -30,6 +31,7 @@ attribute[].name "str_elem_map.value.name"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "str_elem_map.value.weight"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "int_elem_map.key"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "int_elem_map.value.name"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
diff --git a/config-model/src/test/derived/music/attributes.cfg b/config-model/src/test/derived/music/attributes.cfg
index ebb8eb10c14..a31325e67d0 100644
--- a/config-model/src/test/derived/music/attributes.cfg
+++ b/config-model/src/test/derived/music/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "sales"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "pto"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "mid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "weight"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "bgnpfrom"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "newestedition"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "year"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "did"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -226,6 +234,7 @@ attribute[].name "cbid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -254,6 +263,7 @@ attribute[].name "hiphopvalue_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -282,6 +292,7 @@ attribute[].name "metalvalue_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/newrank/attributes.cfg b/config-model/src/test/derived/newrank/attributes.cfg
index 5f5e7e62d83..68f24871f02 100644
--- a/config-model/src/test/derived/newrank/attributes.cfg
+++ b/config-model/src/test/derived/newrank/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "sales"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "pto"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "mid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "weight"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "bgnpfrom"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "newestedition"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "year"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "did"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -226,6 +234,7 @@ attribute[].name "scorekey"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -254,6 +263,7 @@ attribute[].name "cbid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/predicate_attribute/attributes.cfg b/config-model/src/test/derived/predicate_attribute/attributes.cfg
index 6a7ff8af7ad..ff45cf1a41e 100644
--- a/config-model/src/test/derived/predicate_attribute/attributes.cfg
+++ b/config-model/src/test/derived/predicate_attribute/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "some_predicate_field"
attribute[].datatype PREDICATE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/prefixexactattribute/attributes.cfg b/config-model/src/test/derived/prefixexactattribute/attributes.cfg
index 2a5fc890f9e..f9878068372 100644
--- a/config-model/src/test/derived/prefixexactattribute/attributes.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "attributefield1"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "attributefield2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/reference_fields/attributes.cfg b/config-model/src/test/derived/reference_fields/attributes.cfg
index 3ecd24d50dc..ad3ff5e62f8 100644
--- a/config-model/src/test/derived/reference_fields/attributes.cfg
+++ b/config-model/src/test/derived/reference_fields/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "campaign_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "other_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "yet_another_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/sorting/attributes.cfg b/config-model/src/test/derived/sorting/attributes.cfg
index a84c7780965..ebe0e83540e 100644
--- a/config-model/src/test/derived/sorting/attributes.cfg
+++ b/config-model/src/test/derived/sorting/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "syntaxcheck"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "syntaxcheck2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "infieldonly"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/tensor/attributes.cfg b/config-model/src/test/derived/tensor/attributes.cfg
index cc28f1b6f84..398cdf5f8f8 100644
--- a/config-model/src/test/derived/tensor/attributes.cfg
+++ b/config-model/src/test/derived/tensor/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "f2"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "f3"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "f4"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "f5"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "f6"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/derived/types/attributes.cfg b/config-model/src/test/derived/types/attributes.cfg
index d30c79efbc2..05e19a15d96 100644
--- a/config-model/src/test/derived/types/attributes.cfg
+++ b/config-model/src/test/derived/types/attributes.cfg
@@ -2,6 +2,7 @@ attribute[].name "abyte"
attribute[].datatype INT8
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -30,6 +31,7 @@ attribute[].name "along"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -58,6 +60,7 @@ attribute[].name "abool"
attribute[].datatype BOOL
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -86,6 +89,7 @@ attribute[].name "ashortfloat"
attribute[].datatype FLOAT16
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -114,6 +118,7 @@ attribute[].name "arrayfield"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -142,6 +147,7 @@ attribute[].name "setfield"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -170,6 +176,7 @@ attribute[].name "setfield2"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero true
attribute[].createifnonexistent true
attribute[].fastsearch false
@@ -198,6 +205,7 @@ attribute[].name "setfield3"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero true
attribute[].createifnonexistent false
attribute[].fastsearch false
@@ -226,6 +234,7 @@ attribute[].name "setfield4"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent true
attribute[].fastsearch false
@@ -254,6 +263,7 @@ attribute[].name "tagfield"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero true
attribute[].createifnonexistent true
attribute[].fastsearch false
@@ -282,6 +292,7 @@ attribute[].name "juletre"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch true
@@ -310,6 +321,7 @@ attribute[].name "album1"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero true
attribute[].createifnonexistent true
attribute[].fastsearch false
@@ -338,6 +350,7 @@ attribute[].name "other"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
attribute[].dictionary.ordering ORDERED
+attribute[].dictionary.type BTREE
attribute[].removeifzero false
attribute[].createifnonexistent false
attribute[].fastsearch false
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
index 911f8e797e1..5589ad018a7 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoldingTestCase.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.searchdefinition.processing;
import com.yahoo.searchdefinition.SearchBuilder;
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/DictionaryTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/DictionaryTestCase.java
new file mode 100644
index 00000000000..256858b372e
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/DictionaryTestCase.java
@@ -0,0 +1,125 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.config.model.test.TestUtil;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.SearchBuilder;
+import com.yahoo.searchdefinition.derived.AttributeFields;
+import com.yahoo.searchdefinition.document.Dictionary;
+import com.yahoo.searchdefinition.parser.ParseException;
+import com.yahoo.vespa.config.search.AttributesConfig;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Test configuration of dictionary control.
+ *
+ * @author baldersheim
+ */
+public class DictionaryTestCase {
+ private static AttributesConfig getConfig(Search search) {
+ AttributeFields attributes = new AttributeFields(search);
+ AttributesConfig.Builder builder = new AttributesConfig.Builder();
+ attributes.getConfig(builder);
+ return builder.build();
+ }
+ private Search createSearch(String def) throws ParseException {
+ SearchBuilder sb = SearchBuilder.createFromString(def);
+ return sb.getSearch();
+ }
+ @Test
+ public void testDefaultDictionarySettings() throws ParseException {
+ String def = TestUtil.joinLines(
+ "search test {",
+ " document test {",
+ " field s1 type string {",
+ " indexing: attribute | summary",
+ " }",
+ " field n1 type int {",
+ " indexing: summary | attribute",
+ " }",
+ " }",
+ "}");
+ Search search = createSearch(def);
+ assertEquals(Dictionary.Type.BTREE, search.getAttribute("s1").getDictionary().getType());
+ assertEquals(Dictionary.Type.BTREE, search.getAttribute("n1").getDictionary().getType());
+ }
+
+ void verifyNumericDictionaryControl(Dictionary.Type expected,
+ AttributesConfig.Attribute.Dictionary.Type.Enum expectedConfig,
+ String ... cfg) throws ParseException
+ {
+ String def = TestUtil.joinLines(
+ "search test {",
+ " document test {",
+ " field n1 type int {",
+ " indexing: summary | attribute",
+ " attribute:fast-search",
+ TestUtil.joinLines(cfg),
+ " }",
+ " }",
+ "}");
+ Search search = createSearch(def);
+ assertEquals(expected, search.getAttribute("n1").getDictionary().getType());
+ assertEquals(expectedConfig,
+ getConfig(search).attribute().get(0).dictionary().type());
+ }
+
+ @Test
+ public void testNumericBtreeSettings() throws ParseException {
+ verifyNumericDictionaryControl(Dictionary.Type.BTREE,
+ AttributesConfig.Attribute.Dictionary.Type.BTREE,
+ "dictionary:btree");
+ }
+ @Test
+ public void testNumericHashSettings() throws ParseException {
+ verifyNumericDictionaryControl(Dictionary.Type.HASH,
+ AttributesConfig.Attribute.Dictionary.Type.HASH,
+ "dictionary:hash");
+ }
+ @Test
+ public void testNumericBtreeAndHashSettings() throws ParseException {
+ verifyNumericDictionaryControl(Dictionary.Type.BTREE_AND_HASH,
+ AttributesConfig.Attribute.Dictionary.Type.BTREE_AND_HASH,
+ "dictionary:btree", "dictionary:hash");
+ }
+ @Test
+ public void testNonNumericFieldsFailsDictionaryControl() throws ParseException {
+ String def =
+ "search test {\n" +
+ " document test {\n" +
+ " field n1 type string {\n" +
+ " indexing: summary | attribute\n" +
+ " dictionary:btree\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
+ try {
+ SearchBuilder sb = SearchBuilder.createFromString(def);
+ fail("Controlling dictionary for non-numeric fields are not yet supported.");
+ } catch (IllegalArgumentException e) {
+ assertEquals("For search 'test', field 'n1': You can only specify 'dictionary:' for numeric fields", e.getMessage());
+ }
+ }
+ @Test
+ public void testNonFastSearchFieldsFailsDictionaryControl() throws ParseException {
+ String def =
+ "search test {\n" +
+ " document test {\n" +
+ " field n1 type int {\n" +
+ " indexing: summary | attribute\n" +
+ " dictionary:btree\n" +
+ " }\n" +
+ " }\n" +
+ "}\n";
+ try {
+ SearchBuilder sb = SearchBuilder.createFromString(def);
+ fail("Controlling dictionary for non-fast-search fields are not allowed.");
+ } catch (IllegalArgumentException e) {
+ assertEquals("For search 'test', field 'n1': You must specify 'attribute:fast-search' to allow dictionary control", e.getMessage());
+ }
+ }
+}
diff --git a/configdefinitions/src/vespa/attributes.def b/configdefinitions/src/vespa/attributes.def
index be336c22cb6..939a0b8476a 100644
--- a/configdefinitions/src/vespa/attributes.def
+++ b/configdefinitions/src/vespa/attributes.def
@@ -4,7 +4,9 @@ namespace=vespa.config.search
attribute[].name string
attribute[].datatype enum { STRING, BOOL, UINT2, UINT4, INT8, INT16, INT32, INT64, FLOAT16, FLOAT, DOUBLE, PREDICATE, TENSOR, REFERENCE, NONE } default=NONE
attribute[].collectiontype enum { SINGLE, ARRAY, WEIGHTEDSET } default=SINGLE
+# Deprecated/ do-not-use, will soon be GCed.
attribute[].dictionary.ordering enum { ORDERED, UNORDERED } default = ORDERED
+attribute[].dictionary.type enum { BTREE, HASH, BTREE_AND_HASH } default = BTREE
attribute[].removeifzero bool default=false
attribute[].createifnonexistent bool default=false
attribute[].fastsearch bool default=false
diff --git a/searchcommon/src/tests/attribute/config/attribute_config_test.cpp b/searchcommon/src/tests/attribute/config/attribute_config_test.cpp
index 3dc1cf6d27e..98b2bfe5c90 100644
--- a/searchcommon/src/tests/attribute/config/attribute_config_test.cpp
+++ b/searchcommon/src/tests/attribute/config/attribute_config_test.cpp
@@ -110,22 +110,24 @@ TEST("Test GrowStrategy consistency") {
}
TEST("DictionaryConfig") {
- using Ordering = DictionaryConfig::Ordering;
- EXPECT_EQUAL(Ordering::ORDERED, DictionaryConfig().getOrdering());
- EXPECT_EQUAL(Ordering::ORDERED, DictionaryConfig(Ordering::ORDERED).getOrdering());
- EXPECT_EQUAL(Ordering::UNORDERED, DictionaryConfig(Ordering::UNORDERED).getOrdering());
- EXPECT_EQUAL(DictionaryConfig(Ordering::ORDERED), DictionaryConfig(Ordering::ORDERED));
- EXPECT_EQUAL(DictionaryConfig(Ordering::UNORDERED), DictionaryConfig(Ordering::UNORDERED));
- EXPECT_NOT_EQUAL(DictionaryConfig(Ordering::UNORDERED), DictionaryConfig(Ordering::ORDERED));
- EXPECT_NOT_EQUAL(DictionaryConfig(Ordering::ORDERED), DictionaryConfig(Ordering::UNORDERED));
- EXPECT_TRUE(Config().set_dictionary_config(DictionaryConfig(Ordering::UNORDERED)) ==
- Config().set_dictionary_config(DictionaryConfig(Ordering::UNORDERED)));
- EXPECT_FALSE(Config().set_dictionary_config(DictionaryConfig(Ordering::UNORDERED)) ==
- Config().set_dictionary_config(DictionaryConfig(Ordering::ORDERED)));
- EXPECT_FALSE(Config().set_dictionary_config(DictionaryConfig(Ordering::UNORDERED)) !=
- Config().set_dictionary_config(DictionaryConfig(Ordering::UNORDERED)));
- EXPECT_TRUE(Config().set_dictionary_config(DictionaryConfig(Ordering::UNORDERED)) !=
- Config().set_dictionary_config(DictionaryConfig(Ordering::ORDERED)));
+ using Type = DictionaryConfig::Type;
+ EXPECT_EQUAL(Type::BTREE, DictionaryConfig().getType());
+ EXPECT_EQUAL(Type::BTREE, DictionaryConfig(Type::BTREE).getType());
+ EXPECT_EQUAL(Type::HASH, DictionaryConfig(Type::HASH).getType());
+ EXPECT_EQUAL(Type::BTREE_AND_HASH, DictionaryConfig(Type::BTREE_AND_HASH).getType());
+ EXPECT_EQUAL(DictionaryConfig(Type::BTREE), DictionaryConfig(Type::BTREE));
+ EXPECT_EQUAL(DictionaryConfig(Type::HASH), DictionaryConfig(Type::HASH));
+ EXPECT_EQUAL(DictionaryConfig(Type::BTREE_AND_HASH), DictionaryConfig(Type::BTREE_AND_HASH));
+ EXPECT_NOT_EQUAL(DictionaryConfig(Type::HASH), DictionaryConfig(Type::BTREE));
+ EXPECT_NOT_EQUAL(DictionaryConfig(Type::BTREE), DictionaryConfig(Type::HASH));
+ EXPECT_TRUE(Config().set_dictionary_config(DictionaryConfig(Type::HASH)) ==
+ Config().set_dictionary_config(DictionaryConfig(Type::HASH)));
+ EXPECT_FALSE(Config().set_dictionary_config(DictionaryConfig(Type::HASH)) ==
+ Config().set_dictionary_config(DictionaryConfig(Type::BTREE)));
+ EXPECT_FALSE(Config().set_dictionary_config(DictionaryConfig(Type::HASH)) !=
+ Config().set_dictionary_config(DictionaryConfig(Type::HASH)));
+ EXPECT_TRUE(Config().set_dictionary_config(DictionaryConfig(Type::HASH)) !=
+ Config().set_dictionary_config(DictionaryConfig(Type::BTREE)));
}
diff --git a/searchcommon/src/vespa/searchcommon/common/dictionary_config.cpp b/searchcommon/src/vespa/searchcommon/common/dictionary_config.cpp
index 00b6ae2710f..a6a0255f96d 100644
--- a/searchcommon/src/vespa/searchcommon/common/dictionary_config.cpp
+++ b/searchcommon/src/vespa/searchcommon/common/dictionary_config.cpp
@@ -8,11 +8,13 @@ namespace search {
std::ostream&
operator<<(std::ostream& os, const DictionaryConfig & cfg) {
- switch(cfg.getOrdering()) {
- case DictionaryConfig::Ordering::ORDERED:
- return os << "ORDERED";
- case DictionaryConfig::Ordering::UNORDERED:
- return os << "UNORDERED";
+ switch(cfg.getType()) {
+ case DictionaryConfig::Type::BTREE:
+ return os << "BTREE";
+ case DictionaryConfig::Type::HASH:
+ return os << "HASH";
+ case DictionaryConfig::Type::BTREE_AND_HASH:
+ return os << "BTREE_AND_HASH";
}
assert(false);
}
diff --git a/searchcommon/src/vespa/searchcommon/common/dictionary_config.h b/searchcommon/src/vespa/searchcommon/common/dictionary_config.h
index 06c88d88670..c35f7eaafef 100644
--- a/searchcommon/src/vespa/searchcommon/common/dictionary_config.h
+++ b/searchcommon/src/vespa/searchcommon/common/dictionary_config.h
@@ -11,13 +11,13 @@ namespace search {
*/
class DictionaryConfig {
public:
- enum class Ordering { ORDERED, UNORDERED };
- DictionaryConfig() noexcept : _ordering(Ordering::ORDERED) {}
- DictionaryConfig(Ordering ordering) noexcept : _ordering(ordering) {}
- Ordering getOrdering() const { return _ordering; }
- bool operator == (const DictionaryConfig & b) const { return _ordering == b._ordering; }
+ enum class Type { BTREE, HASH, BTREE_AND_HASH };
+ DictionaryConfig() noexcept : _type(Type::BTREE) {}
+ DictionaryConfig(Type ordering) noexcept : _type(ordering) {}
+ Type getType() const { return _type; }
+ bool operator == (const DictionaryConfig & b) const { return _type == b._type; }
private:
- Ordering _ordering;
+ Type _type;
};
std::ostream& operator<<(std::ostream& os, const DictionaryConfig & cfg);
diff --git a/searchlib/src/tests/attribute/enum_comparator/enum_comparator_test.cpp b/searchlib/src/tests/attribute/enum_comparator/enum_comparator_test.cpp
index 3690533eef9..d999a6f37a2 100644
--- a/searchlib/src/tests/attribute/enum_comparator/enum_comparator_test.cpp
+++ b/searchlib/src/tests/attribute/enum_comparator/enum_comparator_test.cpp
@@ -27,7 +27,7 @@ using NodeAllocator = TreeType::NodeAllocatorType;
TEST("requireThatNumericLessIsWorking")
{
- NumericEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ NumericEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert(10);
EnumIndex e2 = es.insert(30);
auto cmp1 = es.make_comparator();
@@ -41,7 +41,7 @@ TEST("requireThatNumericLessIsWorking")
TEST("requireThatNumericEqualIsWorking")
{
- NumericEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ NumericEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert(10);
EnumIndex e2 = es.insert(30);
auto cmp1 = es.make_comparator();
@@ -56,7 +56,7 @@ TEST("requireThatNumericEqualIsWorking")
TEST("requireThatFloatLessIsWorking")
{
- FloatEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ FloatEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert(10.5);
EnumIndex e2 = es.insert(30.5);
EnumIndex e3 = es.insert(std::numeric_limits<float>::quiet_NaN());
@@ -74,7 +74,7 @@ TEST("requireThatFloatLessIsWorking")
TEST("requireThatFloatEqualIsWorking")
{
- FloatEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ FloatEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert(10.5);
EnumIndex e2 = es.insert(30.5);
EnumIndex e3 = es.insert(std::numeric_limits<float>::quiet_NaN());
@@ -93,7 +93,7 @@ TEST("requireThatFloatEqualIsWorking")
TEST("requireThatStringLessIsWorking")
{
- StringEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert("Aa");
EnumIndex e2 = es.insert("aa");
EnumIndex e3 = es.insert("aB");
@@ -110,7 +110,7 @@ TEST("requireThatStringLessIsWorking")
TEST("requireThatStringEqualIsWorking")
{
- StringEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert("Aa");
EnumIndex e2 = es.insert("aa");
EnumIndex e3 = es.insert("aB");
@@ -127,7 +127,7 @@ TEST("requireThatStringEqualIsWorking")
TEST("requireThatComparatorWithTreeIsWorking")
{
- NumericEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ NumericEnumStore es(false, DictionaryConfig::Type::BTREE);
vespalib::GenerationHandler g;
TreeType t;
NodeAllocator m;
@@ -152,7 +152,7 @@ TEST("requireThatComparatorWithTreeIsWorking")
TEST("requireThatFoldedLessIsWorking")
{
- StringEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert("Aa");
EnumIndex e2 = es.insert("aa");
EnumIndex e3 = es.insert("aB");
@@ -172,7 +172,7 @@ TEST("requireThatFoldedLessIsWorking")
TEST("requireThatFoldedEqualIsWorking")
{
- StringEnumStore es(false, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore es(false, DictionaryConfig::Type::BTREE);
EnumIndex e1 = es.insert("Aa");
EnumIndex e2 = es.insert("aa");
EnumIndex e3 = es.insert("aB");
diff --git a/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp b/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp
index 769a0d86343..8ce3de52521 100644
--- a/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp
+++ b/searchlib/src/tests/attribute/enumstore/enumstore_test.cpp
@@ -6,7 +6,7 @@
#include <vespa/log/log.h>
LOG_SETUP("enumstore_test");
-using Ordering = search::DictionaryConfig::Ordering;
+using Type = search::DictionaryConfig::Type;
using vespalib::datastore::EntryRef;
namespace search {
@@ -19,42 +19,42 @@ using StringEnumStore = EnumStoreT<const char*>;
struct OrderedDoubleEnumStore {
using EnumStoreType = DoubleEnumStore;
- static constexpr Ordering ordering = Ordering::ORDERED;
+ static constexpr Type type = Type::BTREE;
};
struct UnorderedDoubleEnumStore {
using EnumStoreType = DoubleEnumStore;
- static constexpr Ordering ordering = Ordering::UNORDERED;
+ static constexpr Type type = Type::BTREE_AND_HASH;
};
struct OrderedFloatEnumStore {
using EnumStoreType = FloatEnumStore;
- static constexpr Ordering ordering = Ordering::ORDERED;
+ static constexpr Type type = Type::BTREE;
};
struct UnorderedFloatEnumStore {
using EnumStoreType = FloatEnumStore;
- static constexpr Ordering ordering = Ordering::UNORDERED;
+ static constexpr Type type = Type::BTREE_AND_HASH;
};
struct OrderedNumericEnumStore {
using EnumStoreType = NumericEnumStore;
- static constexpr Ordering ordering = Ordering::ORDERED;
+ static constexpr Type type = Type::BTREE;
};
struct UnorderedNumericEnumStore {
using EnumStoreType = NumericEnumStore;
- static constexpr Ordering ordering = Ordering::UNORDERED;
+ static constexpr Type type = Type::BTREE_AND_HASH;
};
struct OrderedStringEnumStore {
using EnumStoreType = StringEnumStore;
- static constexpr Ordering ordering = Ordering::ORDERED;
+ static constexpr Type type = Type::BTREE;
};
struct UnorderedStringEnumStore {
using EnumStoreType = StringEnumStore;
- static constexpr Ordering ordering = Ordering::UNORDERED;
+ static constexpr Type type = Type::BTREE_AND_HASH;
};
using StringVector = std::vector<std::string>;
@@ -106,7 +106,7 @@ public:
using EnumStoreType = typename EnumStoreTypeAndOrdering::EnumStoreType;
EnumStoreType es;
FloatEnumStoreTest()
- : es(false, EnumStoreTypeAndOrdering::ordering)
+ : es(false, EnumStoreTypeAndOrdering::type)
{}
};
@@ -150,7 +150,7 @@ TYPED_TEST(FloatEnumStoreTest, numbers_can_be_inserted_and_retrieved)
TEST(EnumStoreTest, test_find_folded_on_string_enum_store)
{
- StringEnumStore ses(false, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore ses(false, DictionaryConfig::Type::BTREE);
std::vector<EnumIndex> indices;
std::vector<std::string> unique({"", "one", "two", "TWO", "Two", "three"});
for (std::string &str : unique) {
@@ -201,7 +201,7 @@ public:
void
StringEnumStoreTest::testInsert(bool hasPostings)
{
- StringEnumStore ses(hasPostings, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore ses(hasPostings, DictionaryConfig::Type::BTREE);
std::vector<EnumIndex> indices;
std::vector<std::string> unique;
@@ -251,7 +251,7 @@ TEST_F(StringEnumStoreTest, test_insert_on_store_with_posting_lists)
TEST(EnumStoreTest, test_hold_lists_and_generation)
{
- StringEnumStore ses(false, DictionaryConfig::Ordering::ORDERED);
+ StringEnumStore ses(false, DictionaryConfig::Type::BTREE);
StringVector uniques;
generation_t sesGen = 0u;
uniques.reserve(100);
@@ -328,7 +328,7 @@ dec_ref_count(NumericEnumStore& store, NumericEnumStore::Index idx)
TEST(EnumStoreTest, address_space_usage_is_reported)
{
const size_t ADDRESS_LIMIT = 4290772994; // Max allocated elements in un-allocated buffers + allocated elements in allocated buffers.
- NumericEnumStore store(false, DictionaryConfig::Ordering::ORDERED);
+ NumericEnumStore store(false, DictionaryConfig::Type::BTREE);
using vespalib::AddressSpace;
EXPECT_EQ(AddressSpace(1, 1, ADDRESS_LIMIT), store.get_address_space_usage());
@@ -350,7 +350,7 @@ public:
EnumIndex i5;
BatchUpdaterTest()
- : store(false, DictionaryConfig::Ordering::ORDERED),
+ : store(false, DictionaryConfig::Type::BTREE),
i3(),
i5()
{
@@ -458,7 +458,7 @@ public:
using Values = LoaderTestValues<EnumStoreType>;
LoaderTest()
- : store(true, EnumStoreTypeAndOrdering::ordering)
+ : store(true, EnumStoreTypeAndOrdering::type)
{}
void load_values(enumstore::EnumeratedLoaderBase& loader) const {
@@ -570,7 +570,7 @@ public:
EnumStoreType store;
EnumStoreDictionaryTest()
- : store(true, EnumStoreTypeAndOrdering::ordering)
+ : store(true, EnumStoreTypeAndOrdering::type)
{}
// Reuse test values from LoaderTest
@@ -618,7 +618,7 @@ TYPED_TEST(EnumStoreDictionaryTest, find_frozen_index_works)
this->update_posting_idx(value_0_idx, EntryRef(), this->fake_pidx());
auto& dict = this->store.get_dictionary();
EnumIndex idx;
- if (TypeParam::ordering == Ordering::ORDERED) {
+ if (TypeParam::type == Type::BTREE) {
EXPECT_FALSE(dict.find_frozen_index(this->make_bound_comparator(0), idx));
} else {
EXPECT_TRUE(dict.find_frozen_index(this->make_bound_comparator(0), idx));
@@ -640,7 +640,7 @@ TYPED_TEST(EnumStoreDictionaryTest, find_posting_list_works)
auto& dict = this->store.get_dictionary();
auto root = dict.get_frozen_root();
auto find_result = dict.find_posting_list(this->make_bound_comparator(0), root);
- if (TypeParam::ordering == Ordering::ORDERED) {
+ if (TypeParam::type == Type::BTREE) {
EXPECT_FALSE(find_result.first.valid());
EXPECT_FALSE(find_result.second.valid());
} else {
diff --git a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp
index 145a021801d..2e946c7d34b 100644
--- a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp
@@ -50,20 +50,22 @@ getCollectionTypeMap()
static DataTypeMap _dataTypeMap = getDataTypeMap();
static CollectionTypeMap _collectionTypeMap = getCollectionTypeMap();
-DictionaryConfig::Ordering
-convert(AttributesConfig::Attribute::Dictionary::Ordering ordering_cfg) {
- switch (ordering_cfg) {
- case AttributesConfig::Attribute::Dictionary::Ordering::ORDERED:
- return DictionaryConfig::Ordering::ORDERED;
- case AttributesConfig::Attribute::Dictionary::Ordering::UNORDERED:
- return DictionaryConfig::Ordering::UNORDERED;
+DictionaryConfig::Type
+convert(AttributesConfig::Attribute::Dictionary::Type type_cfg) {
+ switch (type_cfg) {
+ case AttributesConfig::Attribute::Dictionary::Type::BTREE:
+ return DictionaryConfig::Type::BTREE;
+ case AttributesConfig::Attribute::Dictionary::Type::HASH:
+ return DictionaryConfig::Type::HASH;
+ case AttributesConfig::Attribute::Dictionary::Type::BTREE_AND_HASH:
+ return DictionaryConfig::Type::BTREE_AND_HASH;
}
assert(false);
}
DictionaryConfig
convert_dictionary(const AttributesConfig::Attribute::Dictionary & dictionary) {
- return DictionaryConfig(convert(dictionary.ordering));
+ return DictionaryConfig(convert(dictionary.type));
}
}
diff --git a/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp b/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp
index dc501dc9d89..fd523e227b0 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/enumattribute.hpp
@@ -13,7 +13,7 @@ EnumAttribute<B>::
EnumAttribute(const vespalib::string &baseFileName,
const AttributeVector::Config &cfg)
: B(baseFileName, cfg),
- _enumStore(cfg.fastSearch(), cfg.get_dictionary_config().getOrdering())
+ _enumStore(cfg.fastSearch(), cfg.get_dictionary_config().getType())
{
this->setEnum(true);
}
diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.cpp b/searchlib/src/vespa/searchlib/attribute/enumstore.cpp
index 0961f7c87f1..5beafea0046 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumstore.cpp
+++ b/searchlib/src/vespa/searchlib/attribute/enumstore.cpp
@@ -42,14 +42,15 @@ EnumStoreT<const char*>::load_unique_value(const void* src,
}
std::unique_ptr<vespalib::datastore::IUniqueStoreDictionary>
-make_enum_store_dictionary(IEnumStore &store, bool has_postings, search::DictionaryConfig::Ordering ordering, std::unique_ptr<vespalib::datastore::EntryComparator> compare, std::unique_ptr<vespalib::datastore::EntryComparator> folded_compare)
+make_enum_store_dictionary(IEnumStore &store, bool has_postings, search::DictionaryConfig::Type type, std::unique_ptr<vespalib::datastore::EntryComparator> compare, std::unique_ptr<vespalib::datastore::EntryComparator> folded_compare)
{
if (has_postings) {
if (folded_compare) {
return std::make_unique<EnumStoreFoldedDictionary>(store, std::move(compare), std::move(folded_compare));
} else {
- switch (ordering) {
- case search::DictionaryConfig::Ordering::UNORDERED:
+ switch (type) {
+ case search::DictionaryConfig::Type::HASH:
+ case search::DictionaryConfig::Type::BTREE_AND_HASH:
return std::make_unique<EnumStoreDictionary<EnumPostingTree, vespalib::datastore::SimpleHashMap>>(store, std::move(compare));
default:
return std::make_unique<EnumStoreDictionary<EnumPostingTree>>(store, std::move(compare));
diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.h b/searchlib/src/vespa/searchlib/attribute/enumstore.h
index dc75ac1f38b..02b2ec019f6 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumstore.h
+++ b/searchlib/src/vespa/searchlib/attribute/enumstore.h
@@ -74,8 +74,8 @@ private:
ssize_t load_unique_value(const void* src, size_t available, Index& idx);
public:
- EnumStoreT(bool has_postings, search::DictionaryConfig::Ordering ordering);
- virtual ~EnumStoreT();
+ EnumStoreT(bool has_postings, search::DictionaryConfig::Type type);
+ ~EnumStoreT() override;
uint32_t get_ref_count(Index idx) const { return get_entry_base(idx).get_ref_count(); }
void inc_ref_count(Index idx) { return get_entry_base(idx).inc_ref_count(); }
@@ -213,7 +213,9 @@ public:
};
std::unique_ptr<vespalib::datastore::IUniqueStoreDictionary>
-make_enum_store_dictionary(IEnumStore &store, bool has_postings, search::DictionaryConfig::Ordering ordering, std::unique_ptr<vespalib::datastore::EntryComparator> compare, std::unique_ptr<vespalib::datastore::EntryComparator> folded_compare);
+make_enum_store_dictionary(IEnumStore &store, bool has_postings, search::DictionaryConfig::Type type,
+ std::unique_ptr<vespalib::datastore::EntryComparator> compare,
+ std::unique_ptr<vespalib::datastore::EntryComparator> folded_compare);
template <>
diff --git a/searchlib/src/vespa/searchlib/attribute/enumstore.hpp b/searchlib/src/vespa/searchlib/attribute/enumstore.hpp
index 22f0d3e50dc..357026ab944 100644
--- a/searchlib/src/vespa/searchlib/attribute/enumstore.hpp
+++ b/searchlib/src/vespa/searchlib/attribute/enumstore.hpp
@@ -72,13 +72,13 @@ EnumStoreT<EntryT>::load_unique_value(const void* src, size_t available, Index&
}
template <typename EntryT>
-EnumStoreT<EntryT>::EnumStoreT(bool has_postings, search::DictionaryConfig::Ordering ordering)
+EnumStoreT<EntryT>::EnumStoreT(bool has_postings, search::DictionaryConfig::Type type)
: _store(),
_dict(),
_cached_values_memory_usage(),
_cached_values_address_space_usage(0, 0, (1ull << 32))
{
- _store.set_dictionary(make_enum_store_dictionary(*this, has_postings, ordering,
+ _store.set_dictionary(make_enum_store_dictionary(*this, has_postings, type,
std::make_unique<ComparatorType>(_store.get_data_store()),
(has_string_type() ?
std::make_unique<FoldedComparatorType>(_store.get_data_store()) :