aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2022-03-10 15:25:56 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2022-03-10 15:45:48 +0100
commit012e60d24743210d17601eec5076b2dd514d7c30 (patch)
tree01aae17b52567115b18c7b19970c06320a2b9c74 /container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
parent80abc0659f07445536d92c59fae58dfb1f0ecae8 (diff)
Fix grouping result merging
Ensure query is propagated to aggregated grouping result. Populate grouping hit as context to hits inside each grouping in grouping result aggregator prior to postMerge().
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java21
1 files changed, 15 insertions, 6 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java b/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
index 5ce7accfdd4..05c6c7f848e 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/GroupingResultAggregator.java
@@ -3,7 +3,9 @@ package com.yahoo.search.dispatch;
import com.yahoo.prelude.fastsearch.DocsumDefinitionSet;
import com.yahoo.prelude.fastsearch.GroupingListHit;
+import com.yahoo.search.Query;
import com.yahoo.searchlib.aggregation.Grouping;
+import com.yahoo.searchlib.aggregation.Hit;
import java.util.LinkedHashMap;
import java.util.List;
@@ -21,12 +23,14 @@ class GroupingResultAggregator {
private static final Logger log = Logger.getLogger(GroupingResultAggregator.class.getName());
private final Map<Integer, Grouping> groupings = new LinkedHashMap<>();
- private DocsumDefinitionSet documentDefinitions = null;
+ private DocsumDefinitionSet docsumDefinitions = null;
+ private Query query = null;
private int groupingHitsMerged = 0;
void mergeWith(GroupingListHit result) {
- if (groupingHitsMerged == 0) documentDefinitions = result.getDocsumDefinitionSet();
++groupingHitsMerged;
+ if (docsumDefinitions == null) docsumDefinitions = result.getDocsumDefinitionSet();
+ if (query == null) query = result.getQuery();
log.log(Level.FINE, () ->
String.format("Merging hit #%d having %d groupings",
groupingHitsMerged, result.getGroupingList().size()));
@@ -41,10 +45,15 @@ class GroupingResultAggregator {
Optional<GroupingListHit> toAggregatedHit() {
if (groupingHitsMerged == 0) return Optional.empty();
log.log(Level.FINE, () ->
- String.format("Creating aggregated hit containing %d groupings from %d hits",
- groupings.size(), groupingHitsMerged));
- groupings.values().forEach(Grouping::postMerge);
- return Optional.of(new GroupingListHit(List.copyOf(groupings.values()), documentDefinitions));
+ String.format("Creating aggregated hit containing %d groupings from %d hits with docsums '%s' and %s",
+ groupings.size(), groupingHitsMerged, docsumDefinitions, query));
+ GroupingListHit groupingHit = new GroupingListHit(List.copyOf(groupings.values()), docsumDefinitions);
+ groupingHit.setQuery(query);
+ groupingHit.getGroupingList().forEach(g -> {
+ g.select(o -> o instanceof Hit, o -> ((Hit)o).setContext(groupingHit));
+ g.postMerge();
+ });
+ return Optional.of(groupingHit);
}
}