aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-06-03 13:14:04 +0200
committerTor Egge <Tor.Egge@online.no>2024-06-03 13:14:04 +0200
commit261cfc27d0596576a4c2d920f18315750004d897 (patch)
tree6cbafafd3259f3783d269a026a0e60e4a92721c2 /config-model
parent86974425545fe47432cc9c9ffb7cb376c86ec2a5 (diff)
Add second phase rank score drop limit to config model.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/schema/RankProfile.java11
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/RawRankProfile.java5
-rw-r--r--config-model/src/main/java/com/yahoo/schema/parser/ConvertParsedRanking.java2
-rw-r--r--config-model/src/main/java/com/yahoo/schema/parser/ParsedRankProfile.java7
-rw-r--r--config-model/src/main/javacc/SchemaParser.jj2
-rw-r--r--config-model/src/test/java/com/yahoo/schema/RankProfileTestCase.java24
6 files changed, 51 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/RankProfile.java b/config-model/src/main/java/com/yahoo/schema/RankProfile.java
index 60674b5487c..5cfb99cc76a 100644
--- a/config-model/src/main/java/com/yahoo/schema/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/schema/RankProfile.java
@@ -106,6 +106,7 @@ public class RankProfile implements Cloneable {
/** The drop limit used to drop hits with rank score less than or equal to this value */
private double rankScoreDropLimit = -Double.MAX_VALUE;
+ private double secondPhaseRankScoreDropLimit = -Double.MAX_VALUE;
private Set<ReferenceNode> summaryFeatures;
private String inheritedSummaryFeaturesProfileName;
@@ -823,6 +824,16 @@ public class RankProfile implements Cloneable {
.orElse(rankScoreDropLimit);
}
+ public void setSecondPhaseRankScoreDropLimit(double limit) { this.secondPhaseRankScoreDropLimit = limit; }
+
+ public double getSecondPhaseRankScoreDropLimit() {
+ if (secondPhaseRankScoreDropLimit > -Double.MAX_VALUE) {
+ return secondPhaseRankScoreDropLimit;
+ }
+ return uniquelyInherited(p -> p.getSecondPhaseRankScoreDropLimit(), c -> c > -Double.MAX_VALUE, "second-phase rank-score-drop-limit")
+ .orElse(secondPhaseRankScoreDropLimit);
+ }
+
public void addFunction(String name, List<String> arguments, String expression, boolean inline) {
try {
addFunction(parseRankingExpression(name, arguments, expression), inline);
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/RawRankProfile.java b/config-model/src/main/java/com/yahoo/schema/derived/RawRankProfile.java
index b057624f055..e05225226b6 100644
--- a/config-model/src/main/java/com/yahoo/schema/derived/RawRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/schema/derived/RawRankProfile.java
@@ -169,6 +169,7 @@ public class RawRankProfile {
private final OptionalDouble approximateThreshold;
private final OptionalDouble targetHitsMaxAdjustmentFactor;
private final double rankScoreDropLimit;
+ private final double secondPhaseRankScoreDropLimit;
private final boolean sortBlueprintsByCost;
private final boolean alwaysMarkPhraseExpensive;
@@ -219,6 +220,7 @@ public class RawRankProfile {
targetHitsMaxAdjustmentFactor = compiled.getTargetHitsMaxAdjustmentFactor();
keepRankCount = compiled.getKeepRankCount();
rankScoreDropLimit = compiled.getRankScoreDropLimit();
+ secondPhaseRankScoreDropLimit = compiled.getSecondPhaseRankScoreDropLimit();
ignoreDefaultRankFeatures = compiled.getIgnoreDefaultRankFeatures();
rankProperties = new ArrayList<>(compiled.getRankProperties());
@@ -506,6 +508,9 @@ public class RawRankProfile {
if (rankScoreDropLimit > -Double.MAX_VALUE) {
properties.add(new Pair<>("vespa.hitcollector.rankscoredroplimit", rankScoreDropLimit + ""));
}
+ if (secondPhaseRankScoreDropLimit > -Double.MAX_VALUE) {
+ properties.add(new Pair<>("vespa.hitcollector.second-phase.rankscoredroplimit", secondPhaseRankScoreDropLimit + ""));
+ }
if (ignoreDefaultRankFeatures) {
properties.add(new Pair<>("vespa.dump.ignoredefaultfeatures", String.valueOf(true)));
}
diff --git a/config-model/src/main/java/com/yahoo/schema/parser/ConvertParsedRanking.java b/config-model/src/main/java/com/yahoo/schema/parser/ConvertParsedRanking.java
index 77a10862f9c..78f2c8a85ef 100644
--- a/config-model/src/main/java/com/yahoo/schema/parser/ConvertParsedRanking.java
+++ b/config-model/src/main/java/com/yahoo/schema/parser/ConvertParsedRanking.java
@@ -60,6 +60,8 @@ public class ConvertParsedRanking {
parsed.getRankScoreDropLimit().ifPresent
(value -> profile.setRankScoreDropLimit(value));
+ parsed.getSecondPhaseRankScoreDropLimit().ifPresent
+ (value -> profile.setSecondPhaseRankScoreDropLimit(value));
parsed.getTermwiseLimit().ifPresent
(value -> profile.setTermwiseLimit(value));
parsed.getPostFilterThreshold().ifPresent
diff --git a/config-model/src/main/java/com/yahoo/schema/parser/ParsedRankProfile.java b/config-model/src/main/java/com/yahoo/schema/parser/ParsedRankProfile.java
index 93319e82076..6a800bf354f 100644
--- a/config-model/src/main/java/com/yahoo/schema/parser/ParsedRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/schema/parser/ParsedRankProfile.java
@@ -26,6 +26,7 @@ class ParsedRankProfile extends ParsedBlock {
private boolean ignoreDefaultRankFeatures = false;
private Double rankScoreDropLimit = null;
+ private Double secondPhaseRankScoreDropLimit = null;
private Double termwiseLimit = null;
private Double postFilterThreshold = null;
private Double approximateThreshold = null;
@@ -64,6 +65,7 @@ class ParsedRankProfile extends ParsedBlock {
boolean getIgnoreDefaultRankFeatures() { return this.ignoreDefaultRankFeatures; }
Optional<Double> getRankScoreDropLimit() { return Optional.ofNullable(this.rankScoreDropLimit); }
+ Optional<Double> getSecondPhaseRankScoreDropLimit() { return Optional.ofNullable(this.secondPhaseRankScoreDropLimit); }
Optional<Double> getTermwiseLimit() { return Optional.ofNullable(this.termwiseLimit); }
Optional<Double> getPostFilterThreshold() { return Optional.ofNullable(this.postFilterThreshold); }
Optional<Double> getApproximateThreshold() { return Optional.ofNullable(this.approximateThreshold); }
@@ -196,6 +198,11 @@ class ParsedRankProfile extends ParsedBlock {
this.rankScoreDropLimit = limit;
}
+ void setSecondPhaseRankScoreDropLimit(double limit) {
+ verifyThat(secondPhaseRankScoreDropLimit == null, "already has rank-score-drop-limit for second phase");
+ this.secondPhaseRankScoreDropLimit = limit;
+ }
+
void setRerankCount(int count) {
verifyThat(reRankCount == null, "already has rerank-count");
this.reRankCount = count;
diff --git a/config-model/src/main/javacc/SchemaParser.jj b/config-model/src/main/javacc/SchemaParser.jj
index 1365c133932..d87c57574d3 100644
--- a/config-model/src/main/javacc/SchemaParser.jj
+++ b/config-model/src/main/javacc/SchemaParser.jj
@@ -1981,10 +1981,12 @@ void secondPhaseItem(ParsedRankProfile profile) :
{
String expression;
int rerankCount;
+ double dropLimit;
}
{
( expression = expression() { profile.setSecondPhaseRanking(expression); }
| (<RERANK_COUNT> <COLON> rerankCount = integer()) { profile.setRerankCount(rerankCount); }
+ | (<RANK_SCORE_DROP_LIMIT> <COLON> dropLimit = floatValue()) { profile.setSecondPhaseRankScoreDropLimit(dropLimit); }
)
}
diff --git a/config-model/src/test/java/com/yahoo/schema/RankProfileTestCase.java b/config-model/src/test/java/com/yahoo/schema/RankProfileTestCase.java
index 59887bfd57e..36c4847d42e 100644
--- a/config-model/src/test/java/com/yahoo/schema/RankProfileTestCase.java
+++ b/config-model/src/test/java/com/yahoo/schema/RankProfileTestCase.java
@@ -530,4 +530,28 @@ public class RankProfileTestCase extends AbstractSchemaTestCase {
"}");
}
+ @Test
+ public void secondPhaseRankScoreDropLimitIsAddedToRankProperties() throws ParseException {
+ RankProfileRegistry registry = new RankProfileRegistry();
+ ApplicationBuilder builder = new ApplicationBuilder(registry);
+ String input = """
+ schema test {
+ document test {
+ }
+ rank-profile test inherits default {
+ second-phase {
+ rank-score-drop-limit: 17.0
+ }
+ }
+ }
+ """;
+ builder.addSchema(input);
+ builder.build(true);
+ Schema schema = builder.getSchema();
+
+ assertEquals(3, registry.all().size());
+ RawRankProfile rawProfile = createRawRankProfile(registry.get(schema, "test"), schema);
+ assertEquals("17.0", findProperty(rawProfile.configProperties(), "vespa.hitcollector.second-phase.rankscoredroplimit").get());
+ }
+
}