From aa6885abaa2d35ce073dee383987236df557fa30 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Wed, 11 Oct 2023 17:42:47 +0000 Subject: simplify after code review; GC leftover code --- .../java/com/yahoo/search/ranking/FunEvalCtx.java | 7 ------- .../java/com/yahoo/search/ranking/FunEvalSpec.java | 7 +++++++ .../com/yahoo/search/ranking/GlobalPhaseRanker.java | 21 +++++++++++---------- .../com/yahoo/search/ranking/GlobalPhaseSetup.java | 10 +++++----- .../java/com/yahoo/search/ranking/HitRescorer.java | 4 ++-- .../com/yahoo/search/ranking/NormalizerSetup.java | 2 +- .../yahoo/search/ranking/RankProfilesEvaluator.java | 4 ---- .../com/yahoo/search/ranking/ResultReranker.java | 12 +++++------- .../com/yahoo/search/ranking/SimpleEvaluator.java | 2 +- .../java/com/yahoo/search/ranking/WrappedHit.java | 8 -------- 10 files changed, 32 insertions(+), 45 deletions(-) delete mode 100644 container-search/src/main/java/com/yahoo/search/ranking/FunEvalCtx.java create mode 100644 container-search/src/main/java/com/yahoo/search/ranking/FunEvalSpec.java (limited to 'container-search/src/main/java') diff --git a/container-search/src/main/java/com/yahoo/search/ranking/FunEvalCtx.java b/container-search/src/main/java/com/yahoo/search/ranking/FunEvalCtx.java deleted file mode 100644 index c8b8810f368..00000000000 --- a/container-search/src/main/java/com/yahoo/search/ranking/FunEvalCtx.java +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.search.ranking; - -import java.util.List; -import java.util.function.Supplier; - -record FunEvalCtx(Supplier evalSrc, List fromQuery, List fromMF) {} diff --git a/container-search/src/main/java/com/yahoo/search/ranking/FunEvalSpec.java b/container-search/src/main/java/com/yahoo/search/ranking/FunEvalSpec.java new file mode 100644 index 00000000000..df9c509dd82 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/ranking/FunEvalSpec.java @@ -0,0 +1,7 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.ranking; + +import java.util.List; +import java.util.function.Supplier; + +record FunEvalSpec(Supplier evalSource, List fromQuery, List fromMF) {} 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 130cf720684..6e30a81eebc 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 @@ -48,28 +48,29 @@ public class GlobalPhaseRanker { public void rerankHits(Query query, Result result, String schema) { var setup = globalPhaseSetupFor(query, schema).orElse(null); if (setup == null) return; - var mainSrc = withQueryPrep(setup.globalPhaseEvalCtx, query); - var mainMF = setup.globalPhaseEvalCtx.fromMF(); + var mainSpec = setup.globalPhaseEvalSpec; + var mainSrc = withQueryPrep(mainSpec.evalSource(), mainSpec.fromQuery(), query); int rerankCount = setup.rerankCount; var normalizers = new ArrayList(); for (var nSetup : setup.normalizers) { - var normEvalSrc = withQueryPrep(nSetup.evalCtx(), query); - normalizers.add(new NormalizerContext(nSetup.name(), nSetup.supplier().get(), normEvalSrc, nSetup.evalCtx().fromMF())); + var normSpec = nSetup.inputEvalSpec(); + var normEvalSrc = withQueryPrep(normSpec.evalSource(), normSpec.fromQuery(), query); + normalizers.add(new NormalizerContext(nSetup.name(), nSetup.supplier().get(), normEvalSrc, normSpec.fromMF())); } - var rescorer = new HitRescorer(mainSrc, mainMF, normalizers); + var rescorer = new HitRescorer(mainSrc, mainSpec.fromMF(), normalizers); var reranker = new ResultReranker(rescorer, rerankCount); reranker.rerankHits(result); hideImplicitMatchFeatures(result, setup.matchFeaturesToHide); } - static Supplier withQueryPrep(FunEvalCtx evalCtx, Query query) { - var prepared = PreparedInput.findFromQuery(query, evalCtx.fromQuery()); + static Supplier withQueryPrep(Supplier evalSource, List queryFeatures, Query query) { + var prepared = PreparedInput.findFromQuery(query, queryFeatures); Supplier supplier = () -> { - var result = evalCtx.evalSrc().get(); + var evaluator = evalSource.get(); for (var entry : prepared) { - result.bind(entry.name(), entry.value()); + evaluator.bind(entry.name(), entry.value()); } - return result; + return evaluator; }; return supplier; } diff --git a/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseSetup.java b/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseSetup.java index e9335ee8123..31a676e4c8e 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseSetup.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/GlobalPhaseSetup.java @@ -16,17 +16,17 @@ import java.util.function.Supplier; class GlobalPhaseSetup { - final FunEvalCtx globalPhaseEvalCtx; + final FunEvalSpec globalPhaseEvalSpec; final int rerankCount; final Collection matchFeaturesToHide; final List normalizers; - GlobalPhaseSetup(FunEvalCtx globalPhase, + GlobalPhaseSetup(FunEvalSpec globalPhaseEvalSpec, final int rerankCount, Collection matchFeaturesToHide, List normalizers) { - this.globalPhaseEvalCtx = globalPhase; + this.globalPhaseEvalSpec = globalPhaseEvalSpec; this.rerankCount = rerankCount; this.matchFeaturesToHide = matchFeaturesToHide; this.normalizers = normalizers; @@ -105,7 +105,7 @@ class GlobalPhaseSetup { } } Supplier supplier = SimpleEvaluator.wrap(functionEvaluatorSource); - var gfun = new FunEvalCtx(supplier, fromQuery, fromMF); + var gfun = new FunEvalSpec(supplier, fromQuery, fromMF); return new GlobalPhaseSetup(gfun, rerankCount, namesToHide, normalizers); } return null; @@ -129,7 +129,7 @@ class GlobalPhaseSetup { throw new IllegalArgumentException("Bad config, missing normalizer input: " + input); } } - var fun = new FunEvalCtx(evalSupplier, fromQuery, fromMF); + var fun = new FunEvalSpec(evalSupplier, fromQuery, fromMF); return new NormalizerSetup(cfg.name(), makeNormalizerSupplier(cfg, rerankCount), fun); } diff --git a/container-search/src/main/java/com/yahoo/search/ranking/HitRescorer.java b/container-search/src/main/java/com/yahoo/search/ranking/HitRescorer.java index 7336713da64..fee4f5b4160 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/HitRescorer.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/HitRescorer.java @@ -37,7 +37,7 @@ class HitRescorer { } } - boolean rescoreHit(WrappedHit wrapped) { + double rescoreHit(WrappedHit wrapped) { var scorer = mainEvalSrc.get(); for (var n : normalizers) { double normalizedValue = n.normalizer().getOutput(wrapped.getIdx()); @@ -45,7 +45,7 @@ class HitRescorer { } double newScore = evalScorer(wrapped, scorer, mainFromMF); wrapped.setScore(newScore); - return true; + return newScore; } private static double evalScorer(WrappedHit wrapped, Evaluator scorer, List fromMF) { diff --git a/container-search/src/main/java/com/yahoo/search/ranking/NormalizerSetup.java b/container-search/src/main/java/com/yahoo/search/ranking/NormalizerSetup.java index 6e93a73b6ed..32fbb3190fc 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/NormalizerSetup.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/NormalizerSetup.java @@ -3,4 +3,4 @@ package com.yahoo.search.ranking; import java.util.function.Supplier; -record NormalizerSetup(String name, Supplier supplier, FunEvalCtx evalCtx) {} +record NormalizerSetup(String name, Supplier supplier, FunEvalSpec inputEvalSpec) {} diff --git a/container-search/src/main/java/com/yahoo/search/ranking/RankProfilesEvaluator.java b/container-search/src/main/java/com/yahoo/search/ranking/RankProfilesEvaluator.java index b6b4c4080b4..0ebb98af60e 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/RankProfilesEvaluator.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/RankProfilesEvaluator.java @@ -63,10 +63,6 @@ public class RankProfilesEvaluator extends AbstractComponent { return modelForRankProfile(rankProfile).evaluatorOf(functionName); } - Supplier getSupplier(String rankProfile, String functionName) { - return () -> new SimpleEvaluator(evaluatorForFunction(rankProfile, functionName)); - } - private Map profilesWithGlobalPhase = new HashMap<>(); Optional getGlobalPhaseSetup(String rankProfile) { diff --git a/container-search/src/main/java/com/yahoo/search/ranking/ResultReranker.java b/container-search/src/main/java/com/yahoo/search/ranking/ResultReranker.java index 2d54e58daa2..2e9edd6de3a 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/ResultReranker.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/ResultReranker.java @@ -62,13 +62,11 @@ class ResultReranker { for (var iterator = hitsToRescore.iterator(); count < rerankCount && iterator.hasNext(); ) { WrappedHit wrapped = iterator.next(); double oldScore = wrapped.getScore(); - boolean didRerank = hitRescorer.rescoreHit(wrapped); - if (didRerank) { - ranges.withInitialScore(oldScore); - ranges.withFinalScore(wrapped.getScore()); - ++count; - iterator.remove(); - } + double newScore = hitRescorer.rescoreHit(wrapped); + ranges.withInitialScore(oldScore); + ranges.withFinalScore(newScore); + ++count; + iterator.remove(); } } diff --git a/container-search/src/main/java/com/yahoo/search/ranking/SimpleEvaluator.java b/container-search/src/main/java/com/yahoo/search/ranking/SimpleEvaluator.java index f2943c18960..548576e3a15 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/SimpleEvaluator.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/SimpleEvaluator.java @@ -26,7 +26,7 @@ class SimpleEvaluator implements Evaluator { @Override public Evaluator bind(String name, Tensor value) { - if (value != null) evaluator.bind(name, value); + evaluator.bind(name, value); return this; } diff --git a/container-search/src/main/java/com/yahoo/search/ranking/WrappedHit.java b/container-search/src/main/java/com/yahoo/search/ranking/WrappedHit.java index 3b564eec3aa..7c33b836e33 100644 --- a/container-search/src/main/java/com/yahoo/search/ranking/WrappedHit.java +++ b/container-search/src/main/java/com/yahoo/search/ranking/WrappedHit.java @@ -66,14 +66,6 @@ class WrappedHit implements Comparable { return asTensor; } - Double getDouble(String argName) { - Double arg = matchFeatures.getDouble(argName); - if (arg == null) { - arg = matchFeatures.getDouble(alternate(argName)); - } - return arg; - } - private static final String RE_PREFIX = RANKING_EXPRESSION_WRAPPER + "("; private static final String RE_SUFFIX = ")"; private static final int RE_PRE_LEN = RE_PREFIX.length(); -- cgit v1.2.3