diff options
author | Geir Storli <geirst@verizonmedia.com> | 2020-05-12 15:52:15 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2020-05-12 15:52:15 +0000 |
commit | fe5a4c73f70cc451f461bc007d1ce7d32481edb2 (patch) | |
tree | bd8007d72484c81f11d43ca4a3ec0003f74d0bec /config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation | |
parent | 2d5ddf827dcef2af9619f8a9fee148f9edd12b02 (diff) |
Support specifying a distance metric for nearest neighbor search when not having a hnsw index.
This also changes the syntax in the sd file to specifying the distance metric in the attribute tag.
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation')
2 files changed, 10 insertions, 8 deletions
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 861a9f530d4..b638932a4a8 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 @@ -5,6 +5,7 @@ import com.yahoo.searchdefinition.document.Attribute; import com.yahoo.searchdefinition.document.SDField; import com.yahoo.tensor.TensorType; +import java.util.Locale; import java.util.Optional; /** @@ -24,6 +25,7 @@ public class AttributeOperation implements FieldOperation, FieldOperationContain private String alias; private String aliasedName; private Optional<TensorType> tensorType = Optional.empty(); + private Optional<String> distanceMetric = Optional.empty(); public AttributeOperation(String name) { this.name = name; @@ -116,6 +118,10 @@ public class AttributeOperation implements FieldOperation, FieldOperationContain this.tensorType = Optional.of(tensorType); } + public void setDistanceMetric(String value) { + this.distanceMetric = Optional.of(value); + } + public void apply(SDField field) { Attribute attribute = null; if (attributeIsSuffixOfStructField(field.getName())) { @@ -153,6 +159,10 @@ public class AttributeOperation implements FieldOperation, FieldOperationContain if (tensorType.isPresent()) { attribute.setTensorType(tensorType.get()); } + if (distanceMetric.isPresent()) { + String upper = distanceMetric.get().toUpperCase(Locale.ENGLISH); + attribute.setDistanceMetric(Attribute.DistanceMetric.valueOf(upper)); + } } private boolean attributeIsSuffixOfStructField(String fieldName) { diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexOperation.java index 0c1f443dee3..7f9da28b9ca 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexOperation.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/IndexOperation.java @@ -32,7 +32,6 @@ public class IndexOperation implements FieldOperation { private OptionalDouble densePostingListThreshold = OptionalDouble.empty(); private Optional<Boolean> enableBm25 = Optional.empty(); - private Optional<String> distanceMetric = Optional.empty(); private Optional<HnswIndexParams.Builder> hnswIndexParams = Optional.empty(); public String getIndexName() { @@ -95,9 +94,6 @@ public class IndexOperation implements FieldOperation { if (enableBm25.isPresent()) { index.setInterleavedFeatures(enableBm25.get()); } - if (distanceMetric.isPresent()) { - index.setDistanceMetric(distanceMetric.get()); - } if (hnswIndexParams.isPresent()) { index.setHnswIndexParams(hnswIndexParams.get().build()); } @@ -131,10 +127,6 @@ public class IndexOperation implements FieldOperation { enableBm25 = Optional.of(value); } - public void setDistanceMetric(String value) { - this.distanceMetric = Optional.of(value); - } - public void setHnswIndexParams(HnswIndexParams.Builder params) { this.hnswIndexParams = Optional.of(params); } |