diff options
author | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
---|---|---|
committer | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
commit | 567be9a1f6353cec41c23bfd1fcd46b4b2a4d2d7 (patch) | |
tree | 4664a743e166a5e11aee7b9acd70ad8ee2617612 /container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java | |
parent | e9058b555d4dfea2f6c872d9a677e8678b569569 (diff) | |
parent | bce3b8e926bf9da880172acbe1ba4b12d5e026d6 (diff) |
Merge branch 'master' into bjormel/aws-main-controllerbjormel/aws-main-controller
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java | 49 |
1 files changed, 49 insertions, 0 deletions
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 new file mode 100644 index 00000000000..914635fef59 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/ranking/PreparedInput.java @@ -0,0 +1,49 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.ranking; + +import com.yahoo.component.annotation.Inject; +import com.yahoo.search.Query; +import com.yahoo.search.Result; +import com.yahoo.search.query.Sorting; +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.*; +import java.util.function.Supplier; +import java.util.logging.Logger; + +record PreparedInput(String name, Tensor value) { + + static List<PreparedInput> findFromQuery(Query query, Collection<String> queryFeatures, Map<String, Tensor> defaultValues) { + List<PreparedInput> result = new ArrayList<>(); + var ranking = query.getRanking(); + var rankFeatures = ranking.getFeatures(); + var rankProps = ranking.getProperties(); + for (String queryFeatureName : queryFeatures) { + String needed = "query(" + queryFeatureName + ")"; + // after prepare() the query tensor ends up here: + var feature = rankProps.getAsTensor(queryFeatureName); + if (feature.isEmpty()) { + // searchers are recommended to place query features here: + feature = rankFeatures.getTensor(needed); + } + if (feature.isEmpty()) { + var t = defaultValues.get(needed); + if (t != null) { + feature = Optional.of(t); + } + } + if (feature.isEmpty()) { + throw new IllegalArgumentException("missing query feature: " + queryFeatureName); + } + result.add(new PreparedInput(needed, feature.get())); + } + return result; + } + +} |