diff options
author | Henrik <henrik.hoiness@online.no> | 2018-08-07 14:43:00 +0200 |
---|---|---|
committer | Henrik <henrik.hoiness@online.no> | 2018-08-07 14:43:00 +0200 |
commit | be31b9fc952bc6ad9548d8374cd0ae32b89223b6 (patch) | |
tree | 247499248ef2e52b28724697de02b23b82afda6d /container-search/src/main/java/com | |
parent | d0cf8f54872dd5483e1d319c9fdde3987bdcf9b1 (diff) |
Added a object structure for GroupingRequest objects, accessable from query.getSelect().getGrouping()
Diffstat (limited to 'container-search/src/main/java/com')
3 files changed, 34 insertions, 10 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java index bf7eb8dc12e..6c9faccad5c 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java @@ -46,7 +46,8 @@ import com.yahoo.vespa.objects.ObjectPredicate; public class GroupingExecutor extends Searcher { public final static String COMPONENT_NAME = "GroupingExecutor"; - private final static CompoundName PROP_GROUPINGLIST = newCompoundName("GroupingList"); + public final static String GROUPING_LIST = "GroupingList"; + private final static CompoundName PROP_GROUPINGLIST = newCompoundName(GROUPING_LIST); private final static Logger log = Logger.getLogger(GroupingExecutor.class.getName()); /** @@ -377,7 +378,7 @@ public class GroupingExecutor extends Searcher { return (obj instanceof List); } - /** + /**1 * Sets the list of {@link Grouping} objects assigned to the given query. This method overwrites any grouping * objects already assigned to the query. * diff --git a/container-search/src/main/java/com/yahoo/search/query/Select.java b/container-search/src/main/java/com/yahoo/search/query/Select.java index 3ffc6bddb24..9b287fe2d10 100644 --- a/container-search/src/main/java/com/yahoo/search/query/Select.java +++ b/container-search/src/main/java/com/yahoo/search/query/Select.java @@ -10,6 +10,9 @@ import com.yahoo.search.query.profile.types.FieldDescription; import com.yahoo.search.query.profile.types.QueryProfileType; import com.yahoo.search.yql.VespaGroupingStep; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** @@ -27,11 +30,11 @@ public class Select implements Cloneable { public static final String WHERE = "where"; public static final String GROUPING = "grouping"; - private static Model model; private Query parent; private String where = ""; private String grouping = ""; + private List<GroupingRequest> groupingRequests = new ArrayList<>(); static { argumentType = new QueryProfileType(SELECT); @@ -68,7 +71,7 @@ public class Select implements Cloneable { /** Set the where-clause for the query. Must be a JSON-string, with the format described in the Select Reference doc - https://docs.vespa.ai/documentation/reference/select-reference.html. */ - public void setWhere(String where) { + public void setWhereString(String where) { this.where = where; model.setType(SELECT); @@ -84,7 +87,7 @@ public class Select implements Cloneable { /** Set the grouping-string for the query. Must be a JSON-string, with the format described in the Select Reference doc - https://docs.vespa.ai/documentation/reference/select-reference.html. */ - public void setGrouping(String grouping){ + public void setGroupingString(String grouping){ this.grouping = grouping; SelectParser parser = (SelectParser) ParserFactory.newInstance(Query.Type.SELECT, new ParserEnvironment()); @@ -102,6 +105,22 @@ public class Select implements Cloneable { } + /** Returns the query's {@link GroupingRequest} objects */ + public List<GroupingRequest> getGrouping(){ return this.groupingRequests; } + + + /** Set the query's list of {@link GroupingRequest} objects */ + public void setGrouping(Object lst){ + if (lst == null) { + lst = Collections.emptyList(); + } + if (!(lst instanceof List)) { + throw new IllegalArgumentException("Expected " + GroupingRequest.class + ", got " + lst.getClass() + "."); + } + this.groupingRequests = (List<GroupingRequest>) lst; + } + + @Override public String toString() { return "where: [" + where + "], grouping: [" + grouping+ "]"; diff --git a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java index 71002166b11..9523ee36568 100644 --- a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java +++ b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java @@ -3,10 +3,11 @@ package com.yahoo.search.query.properties; import com.yahoo.processing.request.CompoundName; import com.yahoo.search.Query; +import com.yahoo.search.grouping.GroupingRequest; +import com.yahoo.search.grouping.vespa.GroupingExecutor; import com.yahoo.search.query.*; import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry; import com.yahoo.search.query.profile.types.FieldDescription; -import com.yahoo.search.query.profile.types.QueryProfileFieldType; import com.yahoo.search.query.profile.types.QueryProfileType; import com.yahoo.search.query.ranking.Diversity; import com.yahoo.search.query.ranking.MatchPhase; @@ -14,11 +15,11 @@ import com.yahoo.search.query.ranking.Matching; import com.yahoo.search.query.ranking.SoftTimeout; import com.yahoo.tensor.Tensor; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; + + /** * Maps between the query model and text properties. * This can be done simpler by using reflection but the performance penalty was not worth it, @@ -139,6 +140,7 @@ public class QueryProperties extends Properties { if (key.toString().equals(Model.MODEL)) return query.getModel(); if (key.toString().equals(Ranking.RANKING)) return query.getRanking(); if (key.toString().equals(Presentation.PRESENTATION)) return query.getPresentation(); + if (key.toString().equals(GroupingExecutor.GROUPING_LIST)) return query.getSelect().getGrouping(); } return super.get(key, context, substitution); } @@ -253,9 +255,9 @@ public class QueryProperties extends Properties { } else if (key.size()==2 && key.first().equals(Select.SELECT)) { if (key.last().equals(Select.WHERE)){ - query.getSelect().setWhere(asString(value, "")); + query.getSelect().setWhereString(asString(value, "")); } else if (key.last().equals(Select.GROUPING)) { - query.getSelect().setGrouping(asString(value, "")); + query.getSelect().setGroupingString(asString(value, "")); } } else if (key.first().equals("rankfeature") || key.first().equals("featureoverride") ) { // featureoverride is deprecated @@ -275,6 +277,8 @@ public class QueryProperties extends Properties { query.setNoCache(asBoolean(value,false)); else if (key.equals(Query.GROUPING_SESSION_CACHE)) query.setGroupingSessionCache(asBoolean(value, false)); + else if (key.equals(GroupingExecutor.GROUPING_LIST)) + query.getSelect().setGrouping(value); else super.set(key,value,context); } |