Fix behavior change in the Attributes criterion

This commit is contained in:
ManyTheFish 2025-03-06 14:18:25 +01:00
parent 5ceddbda84
commit ed1dcbe0f7
6 changed files with 109 additions and 95 deletions

View File

@ -559,6 +559,17 @@ impl Index {
self.main.remap_key_type::<Str>().delete(wtxn, main_key::FIELDIDS_WEIGHTS_MAP_KEY)
}
pub fn max_searchable_attribute_weight(&self, rtxn: &RoTxn<'_>) -> Result<Option<Weight>> {
let user_defined_searchable_fields = self.user_defined_searchable_fields(rtxn)?;
if let Some(user_defined_searchable_fields) = user_defined_searchable_fields {
if !user_defined_searchable_fields.contains(&"*") {
return Ok(Some(user_defined_searchable_fields.len().saturating_sub(1) as Weight));
}
}
Ok(None)
}
pub fn searchable_fields_and_weights<'a>(
&self,
rtxn: &'a RoTxn<'a>,

View File

@ -92,7 +92,10 @@ impl RankingRuleGraphTrait for FidGraph {
}
// always lookup the max_fid if we don't already and add an artificial condition for max scoring
let max_weight = weights_map.max_weight();
let max_weight = ctx
.index
.max_searchable_attribute_weight(ctx.txn)?
.or_else(|| weights_map.max_weight());
if let Some(max_weight) = max_weight {
if current_max_weight < max_weight {

View File

@ -8,8 +8,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -25,8 +25,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -42,8 +42,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -59,8 +59,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -76,8 +76,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -93,8 +93,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -110,8 +110,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -127,8 +127,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -144,8 +144,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -161,8 +161,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -178,8 +178,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -195,8 +195,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -212,8 +212,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -229,8 +229,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(

View File

@ -8,8 +8,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -25,8 +25,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -42,8 +42,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -59,8 +59,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -76,8 +76,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -93,8 +93,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -110,8 +110,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -127,8 +127,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -144,8 +144,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -161,8 +161,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -178,8 +178,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -195,8 +195,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -212,8 +212,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -229,8 +229,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(

View File

@ -8,8 +8,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 6,
max_rank: 6,
rank: 11,
max_rank: 11,
},
),
Position(
@ -25,8 +25,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 6,
max_rank: 6,
rank: 11,
max_rank: 11,
},
),
Position(
@ -42,8 +42,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 6,
max_rank: 6,
rank: 11,
max_rank: 11,
},
),
Position(
@ -59,8 +59,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 6,
max_rank: 6,
rank: 11,
max_rank: 11,
},
),
Position(
@ -76,8 +76,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 6,
max_rank: 6,
rank: 11,
max_rank: 11,
},
),
Position(

View File

@ -8,8 +8,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -25,8 +25,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -42,8 +42,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -59,8 +59,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -76,8 +76,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -93,8 +93,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -110,8 +110,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -127,8 +127,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -144,8 +144,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -161,8 +161,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -178,8 +178,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -195,8 +195,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -212,8 +212,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(
@ -229,8 +229,8 @@ expression: "format!(\"{document_ids_scores:#?}\")"
[
Fid(
Rank {
rank: 3,
max_rank: 3,
rank: 5,
max_rank: 5,
},
),
Position(