diff options
author | Geir Storli <geirst@verizonmedia.com> | 2020-11-06 11:45:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-06 11:45:56 +0100 |
commit | fb7f2851f79268edeacbdf8eb7690cf1417834cc (patch) | |
tree | a3e5a103d2e084726f3453eea989fb14e89469ca /config-model | |
parent | 2cb9cffc86558f22ccb777c87d40acabb4824e3a (diff) | |
parent | a91a8eb62d71762dbd00b27932172cf53e15a262 (diff) |
Merge pull request #15204 from vespa-engine/geirst/support-mixed-tensors-as-direct
Support mixed tensors being "direct" triggered by "fast-search" flag.
Diffstat (limited to 'config-model')
2 files changed, 20 insertions, 6 deletions
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 92fcf1b8d83..dcf238c71c2 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 @@ -59,12 +59,14 @@ public class TensorFieldProcessor extends Processor { private boolean isTensorTypeThatSupportsDirectStore(ImmutableSDField field) { var type = ((TensorDataType)field.getDataType()).getTensorType(); - // Tensors with only sparse dimensions can be "direct" + // Tensors with at least one mapped/sparse dimensions can be "direct" // (currenty triggered by fast-search flag) for (var dim : type.dimensions()) { - if (dim.isIndexed()) return false; + if (dim.isMapped()) { + return true; + } } - return true; + return false; } private String tensorTypeToString(ImmutableSDField field) { 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 ae81fc65bdb..7241b7ca5e7 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 @@ -2,6 +2,7 @@ package com.yahoo.searchdefinition.processing; import com.yahoo.config.model.test.TestUtil; +import com.yahoo.searchdefinition.document.Attribute; import com.yahoo.searchdefinition.parser.ParseException; import org.junit.Test; @@ -44,7 +45,7 @@ public class TensorFieldTestCase { } @Test - public void requireThatTensorAttributeCannotBeFastSearch() throws ParseException { + public void requireThatIndexedTensorAttributeCannotBeFastSearch() throws ParseException { try { createFromString(getSd("field f1 type tensor(x[3]) { indexing: attribute \n attribute: fast-search }")); fail("Expected exception"); @@ -67,8 +68,7 @@ public class TensorFieldTestCase { @Test public void hnsw_index_is_default_turned_off() throws ParseException { - var attr = createFromString(getSd("field t1 type tensor(x[64]) { indexing: attribute }")) - .getSearch().getAttribute("t1"); + var attr = getAttributeFromSd("field t1 type tensor(x[64]) { indexing: attribute }", "t1"); assertFalse(attr.hnswIndexParams().isPresent()); } @@ -102,6 +102,14 @@ public class TensorFieldTestCase { } } + @Test + public void tensors_with_at_least_one_mapped_dimension_can_be_direct() throws ParseException { + assertTrue(getAttributeFromSd( + "field t1 type tensor(x{}) { indexing: attribute \n attribute: fast-search }", "t1").isFastSearch()); + assertTrue(getAttributeFromSd( + "field t1 type tensor(x{},y{},z[4]) { indexing: attribute \n attribute: fast-search }", "t1").isFastSearch()); + } + private static String getSd(String field) { return joinLines("search test {", " document test {", @@ -110,6 +118,10 @@ public class TensorFieldTestCase { "}"); } + private Attribute getAttributeFromSd(String fieldSpec, String attrName) throws ParseException { + return createFromString(getSd(fieldSpec)).getSearch().getAttribute(attrName); + } + private void assertHnswIndexParams(String indexSpec, int maxLinksPerNode, int neighborsToExploreAtInsert) throws ParseException { var sd = getSdWithIndexSpec(indexSpec); System.out.println(sd); |