summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-04-19 08:19:49 +0200
committerGitHub <noreply@github.com>2022-04-19 08:19:49 +0200
commit8933192c9359795bcd704a4c60c65446be2f0277 (patch)
tree985f5ff611c60effa8a05b1042d58df4435824b4 /container-search/src/main/java
parent403b5fd89326b67236e0510b36114eab41f33667 (diff)
parentcdab8bc146a9620df29a26a652a93c793e01ea43 (diff)
Merge pull request #22044 from vespa-engine/bratseth/flatten-totalhits
Bratseth/flatten totalhits
Diffstat (limited to 'container-search/src/main/java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/UniqueGroupingSearcher.java1
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/FlatteningSearcher.java17
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/GroupList.java2
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.
*