diff options
3 files changed, 32 insertions, 3 deletions
diff --git a/container-search/src/main/javacc/com/yahoo/prelude/semantics/parser/SemanticsParser.jj b/container-search/src/main/javacc/com/yahoo/prelude/semantics/parser/SemanticsParser.jj index 39ea6435393..a5953964b39 100644 --- a/container-search/src/main/javacc/com/yahoo/prelude/semantics/parser/SemanticsParser.jj +++ b/container-search/src/main/javacc/com/yahoo/prelude/semantics/parser/SemanticsParser.jj @@ -274,7 +274,8 @@ TermProduction nonphraseTermProduction() : TermProduction termProduction; } { - ( termProduction = referenceTermProduction() | + ( LOOKAHEAD(2) + termProduction = referenceTermProduction() | termProduction = literalTermProduction() ) { return termProduction; @@ -314,8 +315,10 @@ ReferenceTermProduction referenceTermProduction() : { String reference; boolean produceAll = false; + String comparisonPrefix = ""; } { + ( comparisonPrefix = comparisonPrefix() )? <LEFTSQUAREBRACKET> reference = referenceIdentifier() (<STAR> { produceAll = true; })? @@ -326,10 +329,17 @@ ReferenceTermProduction referenceTermProduction() : LiteralTermProduction literalTermProduction() : { String literal; + String comparisonPrefix = ""; } { - literal = identifier() - { return new LiteralTermProduction(literal); } + ( ( comparisonPrefix = comparisonPrefix() )? literal = identifier() ) + { return new LiteralTermProduction(comparisonPrefix + literal); } +} + +String comparisonPrefix() : {} +{ + <SMALLER> { return "<"; } | + <LARGER> { return ">"; } } TermType termType() : diff --git a/container-search/src/test/java/com/yahoo/prelude/semantics/test/RangesTestCase.java b/container-search/src/test/java/com/yahoo/prelude/semantics/test/RangesTestCase.java new file mode 100644 index 00000000000..2cdbfbdb3fb --- /dev/null +++ b/container-search/src/test/java/com/yahoo/prelude/semantics/test/RangesTestCase.java @@ -0,0 +1,17 @@ +package com.yahoo.prelude.semantics.test; + +import org.junit.jupiter.api.Test; + +public class RangesTestCase extends RuleBaseAbstractTestCase { + + public RangesTestCase() { + super("ranges.sr"); + } + + @Test + void testPrice() { + assertSemantics("AND shoes price:<5000", + "shoes under 5000"); + } + +} diff --git a/container-search/src/test/java/com/yahoo/prelude/semantics/test/rulebases/ranges.sr b/container-search/src/test/java/com/yahoo/prelude/semantics/test/rulebases/ranges.sr new file mode 100644 index 00000000000..3b0120fd18a --- /dev/null +++ b/container-search/src/test/java/com/yahoo/prelude/semantics/test/rulebases/ranges.sr @@ -0,0 +1,2 @@ +under 5000 -> price:<5000; +over [...] -> price:>[...]; |