diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-04-19 08:19:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-19 08:19:49 +0200 |
commit | 8933192c9359795bcd704a4c60c65446be2f0277 (patch) | |
tree | 985f5ff611c60effa8a05b1042d58df4435824b4 /container-search/src/main/java | |
parent | 403b5fd89326b67236e0510b36114eab41f33667 (diff) | |
parent | cdab8bc146a9620df29a26a652a93c793e01ea43 (diff) |
Merge pull request #22044 from vespa-engine/bratseth/flatten-totalhits
Bratseth/flatten totalhits
Diffstat (limited to 'container-search/src/main/java')
3 files changed, 16 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/UniqueGroupingSearcher.java b/container-search/src/main/java/com/yahoo/search/grouping/UniqueGroupingSearcher.java index 2f1668245da..a1446367f79 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/UniqueGroupingSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/UniqueGroupingSearcher.java @@ -276,4 +276,5 @@ public class UniqueGroupingSearcher extends Searcher { .setLabel(LABEL_HITS) .addOutput(summaryClass == null ? new SummaryValue() : new SummaryValue(summaryClass)))))); } + } diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/FlatteningSearcher.java b/container-search/src/main/java/com/yahoo/search/grouping/result/FlatteningSearcher.java index 321f86facd0..30dee0e540e 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/result/FlatteningSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/result/FlatteningSearcher.java @@ -2,6 +2,7 @@ package com.yahoo.search.grouping.result; import com.yahoo.component.chain.dependencies.Before; +import com.yahoo.processing.request.CompoundName; import com.yahoo.search.Query; import com.yahoo.search.Result; import com.yahoo.search.Searcher; @@ -21,8 +22,11 @@ import java.util.Iterator; @Before(GroupingExecutor.COMPONENT_NAME) public class FlatteningSearcher extends Searcher { + private final CompoundName flatten = CompoundName.fromComponents("grouping", "flatten"); + @Override public Result search(Query query, Execution execution) { + if ( ! query.properties().getBoolean(flatten, true)) return execution.search(query); if ( ! query.properties().getBoolean("flatten", true)) return execution.search(query); query.trace("Flattening groups", 2); @@ -30,16 +34,23 @@ public class FlatteningSearcher extends Searcher { query.setHits(0); Result result = execution.search(query); query.setHits(originalHits); - flatten(result.hits(), result); + flatten(result.hits(), 0, result); return result; } - public void flatten(HitGroup hits, Result result) { + private void flatten(HitGroup hits, int level, Result result) { int hitsLeft = hits.size(); // Iterate only through the initial size for (Iterator<Hit> i = hits.iterator(); i.hasNext() && hitsLeft-- > 0;) { Hit hit = i.next(); + + // If we count the number of unique groups, use that as total hit count. + if (level == 0 && (hit instanceof RootGroup)) { + if (hit.fields().get("count()") != null) + result.setTotalHitCount((long)hit.fields().get("count()")); + } + if (hit instanceof HitGroup) { - flatten((HitGroup)hit, result); + flatten((HitGroup)hit, level++, result); i.remove(); } else { result.hits().add(hit); diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/GroupList.java b/container-search/src/main/java/com/yahoo/search/grouping/result/GroupList.java index d3d48358bc5..7d3228588d4 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/result/GroupList.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/result/GroupList.java @@ -5,7 +5,7 @@ import com.yahoo.search.Result; import com.yahoo.search.grouping.GroupingRequest; /** - * This class represents a labeled group list in the grouping result model. It is contained in {@link Group}, and + * A labeled group list in the grouping result model. It is contained in {@link Group}, and * contains one or more {@link Group groups} itself, allowing for a hierarchy of grouping results. Use the {@link * GroupingRequest#getResultGroup(Result)} to retrieve grouping results. * |