diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2019-07-08 10:39:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-08 10:39:18 +0200 |
commit | 5cc3d139e621ddf947ecb5bb54fb99a95634c932 (patch) | |
tree | b470461adfbb823a69547251571cff30f81d6a89 /indexinglanguage | |
parent | 32bc35e1aaa884b9da3ce00154b127f6fb931939 (diff) | |
parent | 21eef41d88e61ff2ee87b7ba7534caf59fc216f3 (diff) |
Merge pull request #9969 from vespa-engine/geirst/more-robust-ngram-expression
Ensure that NGramExpression can be executed multiple times, where spa…
Diffstat (limited to 'indexinglanguage')
2 files changed, 20 insertions, 0 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java index 816d6a62fd0..d91338e3d3f 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java @@ -48,6 +48,10 @@ public final class NGramExpression extends Expression { @Override protected void doExecute(ExecutionContext ctx) { StringFieldValue input = (StringFieldValue)ctx.getValue(); + if (input.getSpanTree(SpanTrees.LINGUISTICS) != null) { + // This expression is already executed for this input instance + return; + } SpanList spanList = input.setSpanTree(new SpanTree(SpanTrees.LINGUISTICS)).spanList(); int lastPosition = 0; for (Iterator<GramSplitter.Gram> it = linguistics.getGramSplitter().split(input.getString(), gramSize); it.hasNext();) { diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java index bad1407c7c1..0b217d5ba9a 100644 --- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java +++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/NGramTestCase.java @@ -77,6 +77,22 @@ public class NGramTestCase { assertFalse(i.hasNext()); } + @Test + public void requireThatExecuteCanBeCalledMultipleTimes() { + ExecutionContext context = new ExecutionContext(new SimpleTestAdapter()); + context.setValue(new StringFieldValue("some random text string")); + NGramExpression expression = new NGramExpression(new SimpleLinguistics(), 3); + + expression.execute(context); + SpanTree firstTree = ((StringFieldValue)context.getValue()).getSpanTree(SpanTrees.LINGUISTICS); + assertNotNull(firstTree); + + expression.execute(context); + SpanTree secondTree = ((StringFieldValue)context.getValue()).getSpanTree(SpanTrees.LINGUISTICS); + // The span tree instance should be the same. + assertEquals(firstTree, secondTree); + } + private void assertSpan(int from, int length, boolean gram, Iterator<SpanNode> i, SpanTree tree) { assertSpan(from, length, gram, i, tree, null); } |