diff options
Diffstat (limited to 'container-search/src/main/java/com')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseRanker.java | 17 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java | 4 |
2 files changed, 14 insertions, 7 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 bb5a991c304..829d0c268e5 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 @@ -50,9 +50,7 @@ public class GlobalPhaseRanker { return Optional.empty(); } - public void rerankHits(Query query, Result result, String schema) { - var setup = globalPhaseSetupFor(query, schema).orElse(null); - if (setup == null) return; + static void rerankHitsImpl(GlobalPhaseSetup setup, Query query, Result result) { var mainSpec = setup.globalPhaseEvalSpec; var mainSrc = withQueryPrep(mainSpec.evalSource(), mainSpec.fromQuery(), query); int rerankCount = resolveRerankCount(setup, query); @@ -68,6 +66,13 @@ public class GlobalPhaseRanker { hideImplicitMatchFeatures(result, setup.matchFeaturesToHide); } + public void rerankHits(Query query, Result result, String schema) { + var setup = globalPhaseSetupFor(query, schema); + if (setup.isPresent()) { + rerankHitsImpl(setup.get(), query, result); + } + } + static Supplier<Evaluator> withQueryPrep(Supplier<Evaluator> evalSource, List<String> queryFeatures, Query query) { var prepared = PreparedInput.findFromQuery(query, queryFeatures); Supplier<Evaluator> supplier = () -> { @@ -80,7 +85,7 @@ public class GlobalPhaseRanker { return supplier; } - private void hideImplicitMatchFeatures(Result result, Collection<String> namesToHide) { + private static 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();) { @@ -94,7 +99,7 @@ public class GlobalPhaseRanker { if (newValue.fieldCount() == 0) { hit.removeField("matchfeatures"); } else { - hit.setField("matchfeatures", newValue); + hit.setField("matchfeatures", new FeatureData(newValue)); } } } @@ -106,7 +111,7 @@ public class GlobalPhaseRanker { .flatMap(evaluator -> evaluator.getGlobalPhaseSetup(query.getRanking().getProfile())); } - private int resolveRerankCount(GlobalPhaseSetup setup, Query query) { + private static int resolveRerankCount(GlobalPhaseSetup setup, Query query) { if (setup == null) { // there is no global-phase at all (ignore override) return 0; diff --git a/container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java b/container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java index 5ab2d7160f9..346acccd916 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java @@ -30,7 +30,7 @@ record PreparedInput(String name, Tensor value) { for (String queryFeatureName : queryFeatures) { String needed = "query(" + queryFeatureName + ")"; // searchers are recommended to place query features here: - var feature = rankFeatures.getTensor(queryFeatureName); + var feature = rankFeatures.getTensor(needed); if (feature.isPresent()) { result.add(new PreparedInput(needed, feature.get())); } else { @@ -38,6 +38,8 @@ record PreparedInput(String name, Tensor value) { var objList = rankProps.get(queryFeatureName); if (objList != null && objList.size() == 1 && objList.get(0) instanceof Tensor t) { result.add(new PreparedInput(needed, t)); + } else if (objList != null && objList.size() == 1 && objList.get(0) instanceof Double d) { + result.add(new PreparedInput(needed, Tensor.from(d))); } else { throw new IllegalArgumentException("missing query feature: " + queryFeatureName); } |