diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-03-23 20:30:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-23 20:30:23 +0100 |
commit | 73b080b527e303a60a365b2bb95b72dcc2f81f4c (patch) | |
tree | e24f76238e11794e82a6fa5dcb29e3aca2a45af1 /container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java | |
parent | b07fc575ba690710f6524004848e5fc01b3a3152 (diff) | |
parent | 9b505f09092c7df8900da85b9f1d08149466c96d (diff) |
Merge pull request #21787 from vespa-engine/bjorncs/grouping-max-infv7.564.19
Bjorncs/grouping max inf
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/grouping/vespa/RequestBuilder.java | 41 |
1 files changed, 18 insertions, 23 deletions
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 5ee6f7bc604..78452b36cd5 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 @@ -179,16 +179,10 @@ class RequestBuilder { grpLevel.setPrecision(frame.state.precision + offset); frame.state.precision = null; } - int max = -1; if (frame.state.max != null) { - max = frame.state.max; + transform.putMax(tag, frame.state.max, "group list"); + grpLevel.setMaxGroups(LOOKAHEAD + frame.state.max + offset); frame.state.max = null; - } else if (defaultMaxGroups >= 0) { - max = defaultMaxGroups; - } - if (max >= 0) { - transform.putMax(tag, max, "group list"); - grpLevel.setMaxGroups(LOOKAHEAD + max + offset); } frame.grouping.getLevels().add(grpLevel); } @@ -245,12 +239,19 @@ class RequestBuilder { return (oldMax < 0) ? newMax : Math.min(oldMax, newMax); } private void resolveMax(BuildFrame frame) { - if (frame.astNode.hasMax()) { - int max = frame.astNode.getMax(); - if (isTopNAllowed(frame)) { - frame.grouping.setTopN(computeNewTopN(frame.grouping.getTopN(), max)); - } else { - frame.state.max = max; + if (isTopNAllowed(frame)) { + if (frame.astNode.hasMax() && !frame.astNode.hasUnlimitedMax()) { + frame.grouping.setTopN(computeNewTopN(frame.grouping.getTopN(), frame.astNode.getMax())); + } + } else { + if (frame.astNode.hasUnlimitedMax()) { + frame.state.max = null; + } else if (frame.astNode.hasMax()) { + frame.state.max = frame.astNode.getMax(); + } else if (frame.state.groupBy != null && defaultMaxGroups != -1) { + frame.state.max = defaultMaxGroups; + } else if (frame.state.groupBy == null && defaultMaxHits != -1) { + frame.state.max = defaultMaxHits; } } } @@ -297,17 +298,11 @@ class RequestBuilder { throw new UnsupportedOperationException("Can not label expression '" + exp + "'."); } HitsAggregationResult hits = (HitsAggregationResult)result; - int max = -1; if (frame.state.max != null) { - max = frame.state.max; - frame.state.max = null; - } else if (defaultMaxHits >= 0) { - max = defaultMaxHits; - } - if (max >= 0) { - transform.putMax(tag, max, "hit list"); + transform.putMax(tag, frame.state.max, "hit list"); int offset = transform.getOffset(tag); - hits.setMaxHits(LOOKAHEAD + max + offset); + hits.setMaxHits(LOOKAHEAD + frame.state.max + offset); + frame.state.max = null; } transform.putLabel(group.getTag(), tag, frame.state.label, "hit list"); } else { |