diff options
author | Henrik <henrik.hoiness@online.no> | 2018-08-02 17:55:41 +0200 |
---|---|---|
committer | Henrik <henrik.hoiness@online.no> | 2018-08-02 17:55:41 +0200 |
commit | b91884508dce92a35415de9c5bb85f1b691c69a7 (patch) | |
tree | 6367cf19cdfb1c9795e7dccb61295f6c3a5294fb /container-search/src/main/java/com/yahoo/search/query/SelectParser.java | |
parent | 6f49b45153e0ff1d49928d063314cca2859750fc (diff) |
Added parsing of Grouping from JSON to String. Now parsing grouping-parameter and setting the query's groupingrequest when parameter is present
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/SelectParser.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/SelectParser.java | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java index df4d3fb98e3..66beda53804 100644 --- a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java +++ b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java @@ -37,9 +37,11 @@ import com.yahoo.prelude.query.WeakAndItem; import com.yahoo.prelude.query.WeightedSetItem; import com.yahoo.prelude.query.WordAlternativesItem; import com.yahoo.prelude.query.WordItem; +import com.yahoo.search.grouping.request.GroupingOperation; import com.yahoo.search.query.parser.Parsable; import com.yahoo.search.query.parser.Parser; import com.yahoo.search.query.parser.ParserEnvironment; +import com.yahoo.search.yql.VespaGroupingStep; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Inspector; import com.yahoo.slime.ObjectTraverser; @@ -148,12 +150,12 @@ public class SelectParser implements Parser { this.query = query; return buildTree(); - } - public QueryTree buildTree() { - Inspector inspector = SlimeUtils.jsonToSlime(this.query.getSelect().getBytes()).get(); + + private QueryTree buildTree() { + Inspector inspector = SlimeUtils.jsonToSlime(this.query.getSelect().getWhere().getBytes()).get(); if (inspector.field("error_message").valid()){ throw new QueryException("Illegal query: "+inspector.field("error_message").asString() + ", at: "+ new String(inspector.field("offending_input").asData(), StandardCharsets.UTF_8)); } @@ -166,12 +168,13 @@ public class SelectParser implements Parser { } - public Item walkJson(Inspector inspector){ + private Item walkJson(Inspector inspector){ final Item[] item = {null}; inspector.traverse((ObjectTraverser) (key, value) -> { String type = (FUNCTION_CALLS.contains(key)) ? CALL : key; switch (type) { + case AND: item[0] = buildAnd(key, value); break; @@ -204,6 +207,20 @@ public class SelectParser implements Parser { } + public List<VespaGroupingStep> getGroupingSteps(String grouping){ + List<VespaGroupingStep> groupingSteps = new ArrayList<>(); + GroupingOperation groupingOperation = GroupingOperation.fromString(transformGrouping(grouping)); + VespaGroupingStep groupingStep = new VespaGroupingStep(groupingOperation); + groupingSteps.add(groupingStep); + return groupingSteps; + } + + private String transformGrouping(String grouping){ + String groupingString = grouping.replace(" ", "").replace("\"", "").replace("\'", "").replace(":{", "(").replace(":", "(").replace("}", ")").replace(",", ")"); + return groupingString.substring(2, groupingString.length()-1); + } + + @NonNull private Item buildFunctionCall(String key, Inspector value) { switch (key) { |