(query) Fix handling of optional ranking parameters

This commit is contained in:
Viktor Lofgren 2025-01-08 17:11:22 +01:00
parent 02a7900d1a
commit 3772bfd387
3 changed files with 29 additions and 12 deletions

View File

@ -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
);
}

View File

@ -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;

View File

@ -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();
}