From b4a8a1555fd5693c54a3fd71fce1666ee87be0bf Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Wed, 24 Jun 2020 15:47:51 +0200 Subject: 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. --- .../indexinglanguage/expressions/ExactExpression.java | 18 ++++++++++++------ .../expressions/FlattenExpression.java | 1 + 2 files changed, 13 insertions(+), 6 deletions(-) (limited to 'indexinglanguage') 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(); -- cgit v1.2.3