diff options
author | Jon Bratseth <bratseth@gmail.com> | 2020-06-24 15:47:51 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2020-06-24 15:50:48 +0200 |
commit | b4a8a1555fd5693c54a3fd71fce1666ee87be0bf (patch) | |
tree | 7a5d0ed4479f7c31b5b86279ca532320c70da6cb /indexinglanguage/src | |
parent | 6821733667528dddeed658205358f6b9dda12090 (diff) |
Handle an existing spantree in exactmatch
This may happen if a field which is indexed is used as an input for another
field indexed as exact match.
Diffstat (limited to 'indexinglanguage/src')
2 files changed, 13 insertions, 6 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java index 14b5af53b5a..31633cdc88b 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java @@ -27,24 +27,30 @@ public final class ExactExpression extends Expression { @Override protected void doExecute(ExecutionContext ctx) { StringFieldValue input = (StringFieldValue)ctx.getValue(); - if (input.getString().isEmpty()) { - return; - } + if (input.getString().isEmpty()) return; + StringFieldValue output = input.clone(); ctx.setValue(output); String prev = output.getString(); String next = toLowerCase(prev); - SpanList root = new SpanList(); - SpanTree tree = new SpanTree(SpanTrees.LINGUISTICS, root); + SpanTree tree = output.getSpanTree(SpanTrees.LINGUISTICS); + SpanList root; + if (tree == null) { + root = new SpanList(); + tree = new SpanTree(SpanTrees.LINGUISTICS, root); + output.setSpanTree(tree); + } + else { + root = (SpanList)tree.getRoot(); + } SpanNode node = new Span(0, prev.length()); tree.annotate(node, new Annotation(AnnotationTypes.TERM, next.equals(prev) ? null : new StringFieldValue(next))); tree.annotate(node, new Annotation(AnnotationTypes.TOKEN_TYPE, new IntegerFieldValue(TokenType.ALPHABETIC.getValue()))); root.add(node); - output.setSpanTree(tree); } @Override diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java index e43744420f8..91f46381def 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java @@ -24,6 +24,7 @@ public final class FlattenExpression extends Expression { public FlattenExpression() { super(DataType.STRING); } + @Override protected void doExecute(ExecutionContext ctx) { StringFieldValue input = (StringFieldValue)ctx.getValue(); |