diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-07-14 12:09:09 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-07-14 12:09:09 +0200 |
commit | f77b2641cea9d51ceb2f4cfa13eb3dd8571b2161 (patch) | |
tree | 2aaddbdfd614f158121b88e4c9396abca9c3365b /container-search/src/main/java/com/yahoo/search/grouping | |
parent | b60757392ea4d007412581adcd5d7d6be94a1540 (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.java | 35 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java | 3 |
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; |