summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java b/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
index dd419d69315..2aa9fd32795 100644
--- a/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
+++ b/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java
@@ -7,9 +7,15 @@ import com.yahoo.search.Result;
import com.yahoo.search.query.Sorting;
import com.yahoo.search.ranking.RankProfilesEvaluator.GlobalPhaseData;
import com.yahoo.search.result.ErrorMessage;
+import com.yahoo.search.result.FeatureData;
+import com.yahoo.search.result.Hit;
+import com.yahoo.search.result.HitGroup;
import com.yahoo.tensor.Tensor;
+import com.yahoo.data.access.helpers.MatchFeatureData;
+import com.yahoo.data.access.helpers.MatchFeatureFilter;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
@@ -57,6 +63,28 @@ public class GlobalPhaseRanker {
if (rerankCount < 0)
rerankCount = 100;
ResultReranker.rerankHits(result, new HitRescorer(supplier), rerankCount);
+ hideImplicitMatchFeatures(result, data.matchFeaturesToHide());
+ }
+
+ private void hideImplicitMatchFeatures(Result result, Collection<String> namesToHide) {
+ if (namesToHide.size() == 0) return;
+ var filter = new MatchFeatureFilter(namesToHide);
+ for (var iterator = result.hits().deepIterator(); iterator.hasNext();) {
+ Hit hit = iterator.next();
+ if (hit.isMeta() || hit instanceof HitGroup) {
+ continue;
+ }
+ if (hit.getField("matchfeatures") instanceof FeatureData matchFeatures) {
+ if (matchFeatures.inspect() instanceof MatchFeatureData.HitValue hitValue) {
+ var newValue = hitValue.subsetFilter(filter);
+ if (newValue.fieldCount() == 0) {
+ hit.removeField("matchfeatures");
+ } else {
+ hit.setField("matchfeatures", newValue);
+ }
+ }
+ }
+ }
}
private Optional<GlobalPhaseData> globalPhaseDataFor(Query query, String schema) {