summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-05-25 15:09:33 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-05-25 15:09:33 +0200
commit3286961fbda2bffab23fa4181ed91fd0d9ed25ca (patch)
treecb281b649913d0d38748421479e7d0626ef462d7 /container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
parentef25e5f024f7d9e28eafbfd76367c6edf851dfec (diff)
Add preliminary yql for sameElement
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/yql/YqlParser.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/YqlParser.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
index 259719571be..292bb6d0f5a 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java
@@ -47,6 +47,7 @@ import com.yahoo.prelude.query.PrefixItem;
import com.yahoo.prelude.query.RangeItem;
import com.yahoo.prelude.query.RankItem;
import com.yahoo.prelude.query.RegExpItem;
+import com.yahoo.prelude.query.SameElementItem;
import com.yahoo.prelude.query.SegmentItem;
import com.yahoo.prelude.query.SegmentingRule;
import com.yahoo.prelude.query.Substring;
@@ -161,6 +162,7 @@ public class YqlParser implements Parser {
static final String RANGE = "range";
static final String RANKED = "ranked";
static final String RANK = "rank";
+ static final String SAME_ELEMENT = "sameElement";
static final String SCORE_THRESHOLD = "scoreThreshold";
static final String SIGNIFICANCE = "significance";
static final String STEM = "stem";
@@ -533,6 +535,17 @@ public class YqlParser implements Parser {
}
@NonNull
+ private Item instantiateSameElementItem(String field, OperatorNode<ExpressionOperator> ast) {
+ assertHasFunctionName(ast, SAME_ELEMENT);
+
+ SameElementItem sameElement = new SameElementItem(field);
+ for (OperatorNode<ExpressionOperator> word : ast.<List<OperatorNode<ExpressionOperator>>> getArgument(1)) {
+ sameElement.addItem(buildTermSearch(word));
+ }
+ return leafStyleSettings(ast, sameElement);
+ }
+
+ @NonNull
private Item instantiatePhraseItem(String field, OperatorNode<ExpressionOperator> ast) {
assertHasFunctionName(ast, PHRASE);
@@ -1183,6 +1196,8 @@ public class YqlParser implements Parser {
List<String> names = ast.getArgument(0);
Preconditions.checkArgument(names.size() == 1, "Expected 1 name, got %s.", names.size());
switch (names.get(0)) {
+ case SAME_ELEMENT:
+ return instantiateSameElementItem(field, ast);
case PHRASE:
return instantiatePhraseItem(field, ast);
case NEAR:
@@ -1194,7 +1209,7 @@ public class YqlParser implements Parser {
case ALTERNATIVES:
return instantiateWordAlternativesItem(field, ast);
default:
- throw newUnexpectedArgumentException(names.get(0), EQUIV, NEAR, ONEAR, PHRASE);
+ throw newUnexpectedArgumentException(names.get(0), EQUIV, NEAR, ONEAR, PHRASE, SAME_ELEMENT);
}
}