From 3772bfd387492b6e86fa000bbc8ceaa5a6aec6d1 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Wed, 8 Jan 2025 17:11:22 +0100 Subject: [PATCH] (query) Fix handling of optional ranking parameters --- .../api/searchquery/QueryProtobufCodec.java | 33 ++++++++++++++----- .../model/query/SearchSpecification.java | 4 ++- .../index/model/SearchParameters.java | 4 +-- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/QueryProtobufCodec.java b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/QueryProtobufCodec.java index 3c082387..c6782eba 100644 --- a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/QueryProtobufCodec.java +++ b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/QueryProtobufCodec.java @@ -15,7 +15,10 @@ import nu.marginalia.api.searchquery.model.results.debug.ResultRankingDetails; import nu.marginalia.index.query.limit.QueryStrategy; import nu.marginalia.model.EdgeUrl; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class QueryProtobufCodec { @@ -42,13 +45,27 @@ public class QueryProtobufCodec { else builder.setQueryStrategy(request.getQueryStrategy()); - if (query.specs.rankingParams != null && request.getTemporalBias().getBias() != RpcTemporalBias.Bias.NONE) { - builder.setParameters( - RpcResultRankingParameters.newBuilder(query.specs.rankingParams) - .setTemporalBias(request.getTemporalBias()) - .build() - ); + if (request.getTemporalBias().getBias() != RpcTemporalBias.Bias.NONE) { + if (query.specs.rankingParams != null) { + builder.setParameters( + RpcResultRankingParameters.newBuilder(query.specs.rankingParams) + .setTemporalBias(request.getTemporalBias()) + .build() + ); + } else { + builder.setParameters( + RpcResultRankingParameters.newBuilder(PrototypeRankingParameters.sensibleDefaults()) + .setTemporalBias(request.getTemporalBias()) + .build() + ); + } + } else if (query.specs.rankingParams != null) { + builder.setParameters(query.specs.rankingParams); } + // else { + // if we have no ranking params, we don't need to set them, the client check and use the default values + // so we don't need to send this huge object over the wire + // } return builder.build(); } @@ -292,7 +309,7 @@ public class QueryProtobufCodec { IndexProtobufCodec.convertSpecLimit(specs.getRank()), specs.getQueryLimits(), QueryStrategy.valueOf(specs.getQueryStrategy()), - Objects.requireNonNullElseGet(specs.getParameters(), PrototypeRankingParameters::sensibleDefaults) + specs.hasParameters() ? specs.getParameters() : null ); } diff --git a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/query/SearchSpecification.java b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/query/SearchSpecification.java index 725fc2e6..aaea902f 100644 --- a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/query/SearchSpecification.java +++ b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/query/SearchSpecification.java @@ -5,6 +5,7 @@ import nu.marginalia.api.searchquery.RpcResultRankingParameters; import nu.marginalia.index.query.limit.QueryStrategy; import nu.marginalia.index.query.limit.SpecificationLimit; +import javax.annotation.Nullable; import java.util.List; public class SearchSpecification { @@ -28,6 +29,7 @@ public class SearchSpecification { public final QueryStrategy queryStrategy; + @Nullable public final RpcResultRankingParameters rankingParams; public SearchSpecification(SearchQuery query, @@ -40,7 +42,7 @@ public class SearchSpecification { SpecificationLimit rank, RpcQueryLimits queryLimits, QueryStrategy queryStrategy, - RpcResultRankingParameters rankingParams) + @Nullable RpcResultRankingParameters rankingParams) { this.query = query; this.domains = domains; diff --git a/code/index/java/nu/marginalia/index/model/SearchParameters.java b/code/index/java/nu/marginalia/index/model/SearchParameters.java index 2b413e50..0a3a8b86 100644 --- a/code/index/java/nu/marginalia/index/model/SearchParameters.java +++ b/code/index/java/nu/marginalia/index/model/SearchParameters.java @@ -13,8 +13,6 @@ import nu.marginalia.index.query.IndexSearchBudget; import nu.marginalia.index.query.limit.QueryStrategy; import nu.marginalia.index.searchset.SearchSet; -import java.util.Objects; - import static nu.marginalia.api.searchquery.IndexProtobufCodec.convertSpecLimit; public class SearchParameters { @@ -88,7 +86,7 @@ public class SearchParameters { compiledQuery = CompiledQueryParser.parse(this.query.compiledQuery); compiledQueryIds = compiledQuery.mapToLong(SearchTermsUtil::getWordId); - rankingParams = Objects.requireNonNullElseGet(request.getParameters(), PrototypeRankingParameters::sensibleDefaults); + rankingParams = request.hasParameters() ? request.getParameters() : PrototypeRankingParameters.sensibleDefaults(); }