aboutsummaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-06-24 15:47:51 +0200
committerJon Bratseth <bratseth@gmail.com>2020-06-24 15:50:48 +0200
commitb4a8a1555fd5693c54a3fd71fce1666ee87be0bf (patch)
tree7a5d0ed4479f7c31b5b86279ca532320c70da6cb /indexinglanguage
parent6821733667528dddeed658205358f6b9dda12090 (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')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java18
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java1
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();