diff --git a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/IndexProtobufCodec.java b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/IndexProtobufCodec.java index bd421bfc..b0ce3aa4 100644 --- a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/IndexProtobufCodec.java +++ b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/IndexProtobufCodec.java @@ -121,6 +121,7 @@ public class IndexProtobufCodec { params.getTcfProximityWeight(), ResultRankingParameters.TemporalBias.valueOf(params.getTemporalBias().getBias().name()), params.getTemporalBiasWeight(), + params.getDisablePenalties(), params.getExportDebugData() ); } @@ -146,6 +147,7 @@ public class IndexProtobufCodec { .setTcfProximityWeight(rankingParams.tcfProximity) .setTcfVerbatimWeight(rankingParams.tcfVerbatim) .setTemporalBiasWeight(rankingParams.temporalBiasWeight) + .setDisablePenalties(rankingParams.disablePenalties) .setExportDebugData(rankingParams.exportDebugData); if (temporalBias != null && temporalBias.getBias() != RpcTemporalBias.Bias.NONE) { diff --git a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/results/ResultRankingParameters.java b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/results/ResultRankingParameters.java index 575af8cf..537b94cb 100644 --- a/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/results/ResultRankingParameters.java +++ b/code/functions/search-query/api/java/nu/marginalia/api/searchquery/model/results/ResultRankingParameters.java @@ -42,12 +42,14 @@ public class ResultRankingParameters { public double tcfVerbatim; public double tcfProximity; + public TemporalBias temporalBias; public double temporalBiasWeight; + public boolean disablePenalties; public boolean exportDebugData; - public ResultRankingParameters(Bm25Parameters bm25Params, int shortDocumentThreshold, double shortDocumentPenalty, double domainRankBonus, double qualityPenalty, int shortSentenceThreshold, double shortSentencePenalty, double bm25Weight, double tcfFirstPosition, double tcfVerbatim, double tcfProximity, TemporalBias temporalBias, double temporalBiasWeight, boolean exportDebugData) { + public ResultRankingParameters(Bm25Parameters bm25Params, int shortDocumentThreshold, double shortDocumentPenalty, double domainRankBonus, double qualityPenalty, int shortSentenceThreshold, double shortSentencePenalty, double bm25Weight, double tcfFirstPosition, double tcfVerbatim, double tcfProximity, TemporalBias temporalBias, double temporalBiasWeight, boolean disablePenalties, boolean exportDebugData) { this.bm25Params = bm25Params; this.shortDocumentThreshold = shortDocumentThreshold; this.shortDocumentPenalty = shortDocumentPenalty; @@ -61,6 +63,7 @@ public class ResultRankingParameters { this.tcfProximity = tcfProximity; this.temporalBias = temporalBias; this.temporalBiasWeight = temporalBiasWeight; + this.disablePenalties = disablePenalties; this.exportDebugData = exportDebugData; } @@ -80,6 +83,7 @@ public class ResultRankingParameters { .temporalBias(TemporalBias.NONE) .temporalBiasWeight(5.0) .exportDebugData(false) + .disablePenalties(false) .build(); } @@ -139,6 +143,8 @@ public class ResultRankingParameters { return this.temporalBiasWeight; } + public boolean isDisablePenalties() { return this.disablePenalties; } + public boolean isExportDebugData() { return this.exportDebugData; } @@ -166,6 +172,7 @@ public class ResultRankingParameters { result = 31 * result + Double.hashCode(tcfProximity); result = 31 * result + Objects.hashCode(temporalBias); result = 31 * result + Double.hashCode(temporalBiasWeight); + result = 31 * result + Boolean.hashCode(disablePenalties); result = 31 * result + Boolean.hashCode(exportDebugData); return result; } @@ -192,6 +199,7 @@ public class ResultRankingParameters { private double tcfProximity; private TemporalBias temporalBias; private double temporalBiasWeight; + private boolean disablePenalties; private boolean exportDebugData; ResultRankingParametersBuilder() { @@ -262,17 +270,20 @@ public class ResultRankingParameters { return this; } + + public ResultRankingParametersBuilder disablePenalties(boolean disablePenalties) { + this.disablePenalties = disablePenalties; + return this; + } + public ResultRankingParametersBuilder exportDebugData(boolean exportDebugData) { this.exportDebugData = exportDebugData; return this; } public ResultRankingParameters build() { - return new ResultRankingParameters(this.bm25Params, this.shortDocumentThreshold, this.shortDocumentPenalty, this.domainRankBonus, this.qualityPenalty, this.shortSentenceThreshold, this.shortSentencePenalty, this.bm25Weight, this.tcfFirstPosition, this.tcfVerbatim, this.tcfProximity, this.temporalBias, this.temporalBiasWeight, this.exportDebugData); + return new ResultRankingParameters(this.bm25Params, this.shortDocumentThreshold, this.shortDocumentPenalty, this.domainRankBonus, this.qualityPenalty, this.shortSentenceThreshold, this.shortSentencePenalty, this.bm25Weight, this.tcfFirstPosition, this.tcfVerbatim, this.tcfProximity, this.temporalBias, this.temporalBiasWeight, this.disablePenalties, this.exportDebugData); } - public String toString() { - return "ResultRankingParameters.ResultRankingParametersBuilder(bm25Params=" + this.bm25Params + ", shortDocumentThreshold=" + this.shortDocumentThreshold + ", shortDocumentPenalty=" + this.shortDocumentPenalty + ", domainRankBonus=" + this.domainRankBonus + ", qualityPenalty=" + this.qualityPenalty + ", shortSentenceThreshold=" + this.shortSentenceThreshold + ", shortSentencePenalty=" + this.shortSentencePenalty + ", bm25Weight=" + this.bm25Weight + ", tcfFirstPosition=" + this.tcfFirstPosition + ", tcfVerbatim=" + this.tcfVerbatim + ", tcfProximity=" + this.tcfProximity + ", temporalBias=" + this.temporalBias + ", temporalBiasWeight=" + this.temporalBiasWeight + ", exportDebugData=" + this.exportDebugData + ")"; - } } } diff --git a/code/functions/search-query/api/src/main/protobuf/query-api.proto b/code/functions/search-query/api/src/main/protobuf/query-api.proto index b505600b..50e7d2f9 100644 --- a/code/functions/search-query/api/src/main/protobuf/query-api.proto +++ b/code/functions/search-query/api/src/main/protobuf/query-api.proto @@ -162,6 +162,7 @@ message RpcResultRankingParameters { double temporalBiasWeight = 17; bool exportDebugData = 18; + bool disablePenalties = 19; } diff --git a/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java b/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java index 6a4e3c58..ab32e66c 100644 --- a/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java +++ b/code/index/java/nu/marginalia/index/results/IndexResultScoreCalculator.java @@ -248,6 +248,10 @@ public class IndexResultScoreCalculator { ResultRankingParameters rankingParams, @Nullable DebugRankingFactors debugRankingFactors) { + if (rankingParams.disablePenalties) { + return 0.; + } + int rank = DocumentMetadata.decodeRank(documentMetadata); int asl = DocumentMetadata.decodeAvgSentenceLength(documentMetadata); int quality = DocumentMetadata.decodeQuality(documentMetadata); diff --git a/code/services-core/query-service/java/nu/marginalia/query/QueryBasicInterface.java b/code/services-core/query-service/java/nu/marginalia/query/QueryBasicInterface.java index 836f4daa..f32785df 100644 --- a/code/services-core/query-service/java/nu/marginalia/query/QueryBasicInterface.java +++ b/code/services-core/query-service/java/nu/marginalia/query/QueryBasicInterface.java @@ -146,6 +146,7 @@ public class QueryBasicInterface { .shortSentenceThreshold(intFromRequest(request, "shortSentenceThreshold", sensibleDefaults.shortSentenceThreshold)) .shortSentencePenalty(doubleFromRequest(request, "shortSentencePenalty", sensibleDefaults.shortSentencePenalty)) .bm25Weight(doubleFromRequest(request, "bm25Weight", sensibleDefaults.bm25Weight)) + .disablePenalties(boolFromRequest(request, "disablePenalties", sensibleDefaults.disablePenalties)) .exportDebugData(true) .build(); } @@ -154,6 +155,13 @@ public class QueryBasicInterface { return Strings.isNullOrEmpty(request.queryParams(param)) ? defaultValue : Double.parseDouble(request.queryParams(param)); } + boolean boolFromRequest(Request request, String param, boolean defaultValue) { + if (param == null) + return defaultValue; + + return Strings.isNullOrEmpty(request.queryParams(param)) ? defaultValue : Boolean.parseBoolean(request.queryParams(param)); + } + int intFromRequest(Request request, String param, int defaultValue) { return Strings.isNullOrEmpty(request.queryParams(param)) ? defaultValue : parseInt(request.queryParams(param)); } diff --git a/code/services-core/query-service/resources/templates/qdebug.hdb b/code/services-core/query-service/resources/templates/qdebug.hdb index 5e71d13b..05dcb6d7 100644 --- a/code/services-core/query-service/resources/templates/qdebug.hdb +++ b/code/services-core/query-service/resources/templates/qdebug.hdb @@ -67,6 +67,14 @@
+ +
+
+ +
{{/with}}