aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/grouping
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-07-14 12:09:09 +0200
committerJon Bratseth <bratseth@gmail.com>2022-07-14 12:09:09 +0200
commitf77b2641cea9d51ceb2f4cfa13eb3dd8571b2161 (patch)
tree2aaddbdfd614f158121b88e4c9396abca9c3365b /container-search/src/main/java/com/yahoo/search/grouping
parentb60757392ea4d007412581adcd5d7d6be94a1540 (diff)
Carry over parameters when grouping from YQL
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java35
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java3
2 files changed, 22 insertions, 16 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java b/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
index 36a8b7812ba..54194221958 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
@@ -50,25 +50,14 @@ public class GroupingQueryParser extends Searcher {
@Override
public Result search(Query query, Execution execution) {
try {
- if (query.getHttpRequest().getProperty(GROUPING_GLOBAL_MAX_GROUPS.toString()) != null) {
- throw new IllegalInputException(GROUPING_GLOBAL_MAX_GROUPS + " must be specified in a query profile.");
- }
+ validate(query);
String reqParam = query.properties().getString(PARAM_REQUEST);
if (reqParam == null) return execution.search(query);
List<Continuation> continuations = getContinuations(query.properties().getString(PARAM_CONTINUE));
- TimeZone zone = getTimeZone(query.properties().getString(PARAM_TIMEZONE, "utc"));
- for (GroupingOperation op : GroupingOperation.fromStringAsList(reqParam)) {
- GroupingRequest grpRequest = GroupingRequest.newInstance(query);
- grpRequest.setRootOperation(op);
- grpRequest.setTimeZone(zone);
- grpRequest.continuations().addAll(continuations);
- intProperty(query, PARAM_DEFAULT_MAX_GROUPS).ifPresent(grpRequest::setDefaultMaxGroups);
- intProperty(query, PARAM_DEFAULT_MAX_HITS).ifPresent(grpRequest::setDefaultMaxHits);
- longProperty(query, GROUPING_GLOBAL_MAX_GROUPS).ifPresent(grpRequest::setGlobalMaxGroups);
- doubleProperty(query, PARAM_DEFAULT_PRECISION_FACTOR).ifPresent(grpRequest::setDefaultPrecisionFactor);
- }
+ for (GroupingOperation operation : GroupingOperation.fromStringAsList(reqParam))
+ createGroupingRequestIn(query, operation, continuations);
return execution.search(query);
}
catch (IllegalArgumentException e) {
@@ -76,6 +65,22 @@ public class GroupingQueryParser extends Searcher {
}
}
+ public static void validate(Query query) {
+ if (query.getHttpRequest().getProperty(GROUPING_GLOBAL_MAX_GROUPS.toString()) != null)
+ throw new IllegalInputException(GROUPING_GLOBAL_MAX_GROUPS + " must be specified in a query profile.");
+ }
+
+ public static void createGroupingRequestIn(Query query, GroupingOperation operation, List<Continuation> continuations) {
+ GroupingRequest request = GroupingRequest.newInstance(query);
+ request.setRootOperation(operation);
+ request.setTimeZone(getTimeZone(query.properties().getString(PARAM_TIMEZONE, "utc")));
+ request.continuations().addAll(continuations);
+ intProperty(query, PARAM_DEFAULT_MAX_GROUPS).ifPresent(request::setDefaultMaxGroups);
+ intProperty(query, PARAM_DEFAULT_MAX_HITS).ifPresent(request::setDefaultMaxHits);
+ longProperty(query, GROUPING_GLOBAL_MAX_GROUPS).ifPresent(request::setGlobalMaxGroups);
+ doubleProperty(query, PARAM_DEFAULT_PRECISION_FACTOR).ifPresent(request::setDefaultPrecisionFactor);
+ }
+
private List<Continuation> getContinuations(String param) {
if (param == null) {
return Collections.emptyList();
@@ -87,7 +92,7 @@ public class GroupingQueryParser extends Searcher {
return ret;
}
- private TimeZone getTimeZone(String name) {
+ private static TimeZone getTimeZone(String name) {
ZoneCache cache = zoneCache.get();
if (cache == null) {
cache = new ZoneCache();
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java
index e43067ade62..2280ea01263 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java
@@ -406,8 +406,9 @@ class RequestBuilder {
}
private void validateGlobalMax() {
- this.totalGroupsAndSummaries = -1;
if (globalMaxGroups < 0) return;
+
+ this.totalGroupsAndSummaries = -1;
int totalGroupsAndSummaries = 0;
for (Grouping grp : requestList) {
int levelMultiplier = 1;