diff options
author | Jon Bratseth <jonbratseth@yahoo.com> | 2018-01-10 10:03:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-10 10:03:00 +0100 |
commit | 3e1477f5fda4a3dcd436a6d41843adc66e19f370 (patch) | |
tree | f33876464623848d65025a6e8a39c386c76fe710 /config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java | |
parent | a8898cd191476159dcf7eb9a5b366240b2ad091e (diff) | |
parent | dc0f70fac9167acf487453daf565636c675934df (diff) |
Merge pull request #4589 from vespa-engine/bratseth/integrate-tensorflow
Basic TensorFlow integration
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java new file mode 100644 index 00000000000..a3933e6f8e2 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/MacroInliner.java @@ -0,0 +1,40 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.searchdefinition.expressiontransforms; + +import com.yahoo.searchdefinition.RankProfile; +import com.yahoo.searchlib.rankingexpression.rule.CompositeNode; +import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode; +import com.yahoo.searchlib.rankingexpression.rule.ReferenceNode; +import com.yahoo.searchlib.rankingexpression.transform.ExpressionTransformer; + +import java.util.Map; + +/** + * Inlines macros in ranking expressions + * + * @author bratseth + */ +public class MacroInliner extends ExpressionTransformer { + + private final Map<String, RankProfile.Macro> macros; + + public MacroInliner(Map<String, RankProfile.Macro> macros) { + this.macros = macros; + } + + @Override + public ExpressionNode transform(ExpressionNode node) { + if (node instanceof ReferenceNode) + return transformFeatureNode((ReferenceNode)node); + if (node instanceof CompositeNode) + return transformChildren((CompositeNode)node); + return node; + } + + private ExpressionNode transformFeatureNode(ReferenceNode feature) { + RankProfile.Macro macro = macros.get(feature.getName()); + if (macro == null) return feature; + return transform(macro.getRankingExpression().getRoot()); // inline recursively and return + } + +} |