diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-12 15:44:51 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-12 15:44:51 +0100 |
commit | 5aab29c7d5800cf9d0d6e4aa9093d8eb080dcb07 (patch) | |
tree | 59052462ea48ed6c56ed677a2af34776b89e382b /container-search | |
parent | f114eb8bc6c09322aa46ac7209f7a9f801ca79e0 (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.java | 12 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/fastsearch/SlimeSummaryTestCase.java | 9 |
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)); } } |