summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenrik <henrik.hoiness@online.no>2018-08-07 14:43:00 +0200
committerHenrik <henrik.hoiness@online.no>2018-08-07 14:43:00 +0200
commitbe31b9fc952bc6ad9548d8374cd0ae32b89223b6 (patch)
tree247499248ef2e52b28724697de02b23b82afda6d /container-search
parentd0cf8f54872dd5483e1d319c9fdde3987bdcf9b1 (diff)
Added a object structure for GroupingRequest objects, accessable from query.getSelect().getGrouping()
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/Select.java25
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java14
-rw-r--r--container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java6
4 files changed, 36 insertions, 14 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);
}
diff --git a/container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java b/container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java
index 031ba386ad4..b19743a1c60 100644
--- a/container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java
+++ b/container-search/src/test/java/com/yahoo/select/SelectParserTestCase.java
@@ -15,14 +15,12 @@ import com.yahoo.prelude.query.WeakAndItem;
import com.yahoo.prelude.query.WordAlternativesItem;
import com.yahoo.prelude.query.WordItem;
import com.yahoo.search.Query;
-import com.yahoo.search.federation.ProviderConfig;
import com.yahoo.search.query.QueryTree;
import com.yahoo.search.query.Select;
import com.yahoo.search.query.SelectParser;
import com.yahoo.search.query.parser.Parsable;
import com.yahoo.search.query.parser.ParserEnvironment;
import com.yahoo.search.yql.VespaGroupingStep;
-import org.apache.http.client.utils.URIBuilder;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
@@ -669,7 +667,7 @@ public class SelectParserTestCase {
assertEquals("default:query", query.getModel().getQueryTree().toString());
assertEquals(Query.Type.ALL, query.getModel().getType());
- query.getSelect().setWhere("{\"contains\" : [\"default\", \"select\"] }");
+ query.getSelect().setWhereString("{\"contains\" : [\"default\", \"select\"] }");
assertEquals("default:select", query.getModel().getQueryTree().toString());
assertEquals(Query.Type.SELECT, query.getModel().getType());
}
@@ -678,7 +676,7 @@ public class SelectParserTestCase {
@Test
public void testOverridingWhereQueryTree() {
Query query = new Query();
- query.getSelect().setWhere("{\"contains\" : [\"default\", \"select\"] }");
+ query.getSelect().setWhereString("{\"contains\" : [\"default\", \"select\"] }");
assertEquals("default:select", query.getModel().getQueryTree().toString());
assertEquals(Query.Type.SELECT, query.getModel().getType());