summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-11-12 15:44:51 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2019-11-12 15:44:51 +0100
commit5aab29c7d5800cf9d0d6e4aa9093d8eb080dcb07 (patch)
tree59052462ea48ed6c56ed677a2af34776b89e382b /container-search
parentf114eb8bc6c09322aa46ac7209f7a9f801ca79e0 (diff)
Allow function value lookup without rankingExpression() wrapper
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/FeatureData.java12
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java9
2 files changed, 16 insertions, 5 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/result/FeatureData.java b/container-search/src/main/java/com/yahoo/search/result/FeatureData.java
index ed1b5aa0706..4895db04462 100644
--- a/container-search/src/main/java/com/yahoo/search/result/FeatureData.java
+++ b/container-search/src/main/java/com/yahoo/search/result/FeatureData.java
@@ -68,7 +68,7 @@ public class FeatureData implements Inspectable, JsonProducer {
* (that is, if it is a tensor with nonzero rank)
*/
public Double getDouble(String featureName) {
- Inspector featureValue = value.field(featureName);
+ Inspector featureValue = getInspector(featureName);
if ( ! featureValue.valid()) return null;
switch (featureValue.type()) {
@@ -83,7 +83,7 @@ public class FeatureData implements Inspectable, JsonProducer {
* This will return any feature value: Scalars are returned as a rank 0 tensor.
*/
public Tensor getTensor(String featureName) {
- Inspector featureValue = value.field(featureName);
+ Inspector featureValue = getInspector(featureName);
if ( ! featureValue.valid()) return null;
switch (featureValue.type()) {
@@ -93,6 +93,14 @@ public class FeatureData implements Inspectable, JsonProducer {
}
}
+ private Inspector getInspector(String featureName) {
+ Inspector featureValue = value.field(featureName);
+ if (featureValue.valid()) return featureValue;
+
+ // Try to wrap by rankingExpression(name)
+ return value.field("rankingExpression(" + featureName + ")");
+ }
+
/** Returns the names of the features available in this */
public Set<String> featureNames() {
if (this == empty) return Collections.emptySet();
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
index d888ddabdc1..d1399cabc75 100644
--- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java
@@ -118,10 +118,11 @@ public class SlimeSummaryTestCase {
assertEquals(tensor1, hit.getField("tensor_field1"));
assertEquals(tensor2, hit.getField("tensor_field2"));
FeatureData featureData = hit.features();
- assertEquals("double_feature,tensor1_feature,tensor2_feature",
+ assertEquals("double_feature,rankingExpression(tensor1_feature),tensor2_feature",
featureData.featureNames().stream().sorted().collect(Collectors.joining(",")));
assertEquals(0.5, featureData.getDouble("double_feature"), 0.00000001);
assertEquals(tensor1, featureData.getTensor("tensor1_feature"));
+ assertEquals(tensor1, featureData.getTensor("rankingExpression(tensor1_feature)"));
assertEquals(tensor2, featureData.getTensor("tensor2_feature"));
}
@@ -267,7 +268,7 @@ public class SlimeSummaryTestCase {
Slime slime = new Slime();
Cursor summaryFeatures = slime.setObject();
summaryFeatures.setDouble("double_feature", 0.5);
- summaryFeatures.setData("tensor1_feature", TypedBinaryFormat.encode(tensor1));
+ summaryFeatures.setData("rankingExpression(tensor1_feature)", TypedBinaryFormat.encode(tensor1));
summaryFeatures.setData("tensor2_feature", TypedBinaryFormat.encode(tensor2));
expected.put("summaryfeatures", new FeatureData(new SlimeAdapter(slime.get())));
@@ -420,7 +421,9 @@ public class SlimeSummaryTestCase {
if (tensor1 !=null && tensor2 != null) {
Cursor summaryFeatures = docsum.setObject("summaryfeatures");
summaryFeatures.setDouble("double_feature", 0.5);
- summaryFeatures.setData("tensor1_feature", TypedBinaryFormat.encode(tensor1));
+
+ // Values produced by functions are wrapped in rankingExpression(function-name)
+ summaryFeatures.setData("rankingExpression(tensor1_feature)", TypedBinaryFormat.encode(tensor1));
summaryFeatures.setData("tensor2_feature", TypedBinaryFormat.encode(tensor2));
}
}