aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-03-30 16:12:50 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2022-03-30 16:12:50 +0200
commit201cf644e37ebb67200301dfd6a48d06e3cfab59 (patch)
treed6347cfc4bb4f1903a720a4f08ba5b6485e28129 /container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java
parentfcce4495945d2009e3022e137152ddacfe680c97 (diff)
Centralize definition of query parameters and default values
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/GroupingQueryParser.java32
1 files changed, 25 insertions, 7 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 b76a856bb66..36a8b7812ba 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
@@ -12,7 +12,6 @@ import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
import com.yahoo.search.grouping.request.GroupingOperation;
import com.yahoo.search.query.Select;
-import com.yahoo.search.query.properties.DefaultProperties;
import com.yahoo.search.searchchain.Execution;
import com.yahoo.search.searchchain.PhaseNames;
@@ -21,6 +20,9 @@ import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.OptionalDouble;
+import java.util.OptionalInt;
+import java.util.OptionalLong;
import java.util.TimeZone;
/**
@@ -42,13 +44,14 @@ public class GroupingQueryParser extends Searcher {
@Beta public static final CompoundName PARAM_DEFAULT_MAX_HITS = new CompoundName("grouping.defaultMaxHits");
@Beta public static final CompoundName PARAM_DEFAULT_MAX_GROUPS = new CompoundName("grouping.defaultMaxGroups");
@Beta public static final CompoundName PARAM_DEFAULT_PRECISION_FACTOR = new CompoundName("grouping.defaultPrecisionFactor");
+ @Beta public static final CompoundName GROUPING_GLOBAL_MAX_GROUPS = new CompoundName("grouping.globalMaxGroups");
private static final ThreadLocal<ZoneCache> zoneCache = new ThreadLocal<>();
@Override
public Result search(Query query, Execution execution) {
try {
- if (query.getHttpRequest().getProperty(DefaultProperties.GROUPING_GLOBAL_MAX_GROUPS.toString()) != null) {
- throw new IllegalInputException(DefaultProperties.GROUPING_GLOBAL_MAX_GROUPS + " must be specified in a query profile.");
+ if (query.getHttpRequest().getProperty(GROUPING_GLOBAL_MAX_GROUPS.toString()) != null) {
+ throw new IllegalInputException(GROUPING_GLOBAL_MAX_GROUPS + " must be specified in a query profile.");
}
String reqParam = query.properties().getString(PARAM_REQUEST);
@@ -61,10 +64,10 @@ public class GroupingQueryParser extends Searcher {
grpRequest.setRootOperation(op);
grpRequest.setTimeZone(zone);
grpRequest.continuations().addAll(continuations);
- grpRequest.setDefaultMaxGroups(query.properties().getInteger(PARAM_DEFAULT_MAX_GROUPS, -1));
- grpRequest.setDefaultMaxHits(query.properties().getInteger(PARAM_DEFAULT_MAX_HITS, -1));
- grpRequest.setGlobalMaxGroups(query.properties().getLong(DefaultProperties.GROUPING_GLOBAL_MAX_GROUPS));
- grpRequest.setDefaultPrecisionFactor(query.properties().getDouble(PARAM_DEFAULT_PRECISION_FACTOR, 0.0));
+ 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);
}
return execution.search(query);
}
@@ -98,6 +101,21 @@ public class GroupingQueryParser extends Searcher {
return timeZone;
}
+ private static OptionalInt intProperty(Query q, CompoundName name) {
+ Integer val = q.properties().getInteger(name);
+ return val != null ? OptionalInt.of(val) : OptionalInt.empty();
+ }
+
+ private static OptionalLong longProperty(Query q, CompoundName name) {
+ Long val = q.properties().getLong(name);
+ return val != null ? OptionalLong.of(val) : OptionalLong.empty();
+ }
+
+ private static OptionalDouble doubleProperty(Query q, CompoundName name) {
+ Double val = q.properties().getDouble(name);
+ return val != null ? OptionalDouble.of(val) : OptionalDouble.empty();
+ }
+
@SuppressWarnings("serial")
private static class ZoneCache extends LinkedHashMap<String, TimeZone> {