diff options
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping')
4 files changed, 17 insertions, 0 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 ee78e41d0d8..b76a856bb66 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 @@ -41,6 +41,7 @@ public class GroupingQueryParser extends Searcher { public static final CompoundName PARAM_TIMEZONE = new CompoundName("timezone"); @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"); private static final ThreadLocal<ZoneCache> zoneCache = new ThreadLocal<>(); @Override @@ -63,6 +64,7 @@ public class GroupingQueryParser extends Searcher { 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)); } return execution.search(query); } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java b/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java index 9f5deb482db..5250f264423 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/GroupingRequest.java @@ -14,6 +14,7 @@ import com.yahoo.search.result.Hit; import java.util.ArrayList; import java.util.List; +import java.util.OptionalDouble; import java.util.OptionalInt; import java.util.OptionalLong; import java.util.TimeZone; @@ -36,6 +37,7 @@ public class GroupingRequest { private int defaultMaxHits = -1; private int defaultMaxGroups = -1; private long globalMaxGroups = -1; + private double defaultPrecisionFactor = -1; private GroupingRequest(Select parent) { this.parent = parent; @@ -164,6 +166,13 @@ public class GroupingRequest { @Beta public void setGlobalMaxGroups(long v) { this.globalMaxGroups = v; } + @Beta + public OptionalDouble defaultPrecisionFactor() { + return defaultPrecisionFactor > 0 ? OptionalDouble.of(defaultPrecisionFactor) : OptionalDouble.empty(); + } + + @Beta void setDefaultPrecisionFactor(double v) { this.defaultPrecisionFactor = v; } + /** * Creates a new grouping request and adds it to the query.getSelect().getGrouping() list * 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 c7000c0cdcf..32601c4faa4 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 @@ -153,6 +153,7 @@ public class GroupingExecutor extends Searcher { req.defaultMaxGroups().ifPresent(builder::setDefaultMaxGroups); req.defaultMaxHits().ifPresent(builder::setDefaultMaxHits); req.globalMaxGroups().ifPresent(builder::setGlobalMaxGroups); + req.defaultPrecisionFactor().ifPresent(builder::setDefaultPrecisionFactor); builder.build(); RequestContext ctx = new RequestContext(req, builder.getTransform()); 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 b013e87fb24..a88450c7d1d 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 @@ -44,6 +44,7 @@ class RequestBuilder { private int defaultMaxGroups = -1; private long globalMaxGroups = -1; private long totalGroupsAndSummaries = -1; + private double defaultPrecisionFactor = -1; /** * Constructs a new instance of this class. @@ -162,6 +163,8 @@ class RequestBuilder { public RequestBuilder setGlobalMaxGroups(long v) { this.globalMaxGroups = v; return this; } + public RequestBuilder setDefaultPrecisionFactor(double v) { this.defaultPrecisionFactor = v; return this; } + OptionalLong totalGroupsAndSummaries() { return totalGroupsAndSummaries != -1 ? OptionalLong.of(totalGroupsAndSummaries) : OptionalLong.empty(); } @@ -337,6 +340,8 @@ class RequestBuilder { int precision = frame.astNode.getPrecision(); if (precision > 0) { frame.state.precision = precision; + } else if (frame.state.max != null && defaultPrecisionFactor > 0) { + frame.state.precision = Math.max(1, (int) Math.ceil(frame.state.max * defaultPrecisionFactor)); } } |