From ee8cbea8107e3f3a4b5a58ef4b404aef6cc23f4a Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Wed, 27 Mar 2024 16:59:22 +0100 Subject: [PATCH 1/2] Don't optimize reindexing when fields contain dots --- milli/src/update/settings.rs | 39 ++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/milli/src/update/settings.rs b/milli/src/update/settings.rs index 2f53718ac..344905f92 100644 --- a/milli/src/update/settings.rs +++ b/milli/src/update/settings.rs @@ -1032,13 +1032,14 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { { self.index.set_updated_at(self.wtxn, &OffsetDateTime::now_utc())?; + // Note: this MUST be before `update_sortable` so that we can get the old value to compare with the updated value afterwards + let existing_fields: HashSet<_> = self .index .field_distribution(self.wtxn)? .into_iter() .filter_map(|(field, count)| (count != 0).then_some(field)) .collect(); - let old_faceted_fields = self.index.user_defined_faceted_fields(self.wtxn)?; let old_fields_ids_map = self.index.fields_ids_map(self.wtxn)?; @@ -1055,13 +1056,7 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { self.update_sort_facet_values_by()?; self.update_pagination_max_total_hits()?; - // If there is new faceted fields we indicate that we must reindex as we must - // index new fields as facets. It means that the distinct attribute, - // an Asc/Desc criterion or a filtered attribute as be added or removed. - let new_faceted_fields = self.index.user_defined_faceted_fields(self.wtxn)?; - let faceted_updated = - (&existing_fields - &old_faceted_fields) != (&existing_fields - &new_faceted_fields); - + let faceted_updated = self.update_faceted(existing_fields, old_faceted_fields)?; let stop_words_updated = self.update_stop_words()?; let non_separator_tokens_updated = self.update_non_separator_tokens()?; let separator_tokens_updated = self.update_separator_tokens()?; @@ -1094,6 +1089,34 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { Ok(()) } + + fn update_faceted( + &self, + existing_fields: HashSet, + old_faceted_fields: HashSet, + ) -> Result { + if existing_fields.iter().any(|field| field.contains('.')) { + return Ok(true); + } + + if old_faceted_fields.iter().any(|field| field.contains('.')) { + return Ok(true); + } + + // If there is new faceted fields we indicate that we must reindex as we must + // index new fields as facets. It means that the distinct attribute, + // an Asc/Desc criterion or a filtered attribute as be added or removed. + let new_faceted_fields = self.index.user_defined_faceted_fields(self.wtxn)?; + + if new_faceted_fields.iter().any(|field| field.contains('.')) { + return Ok(true); + } + + let faceted_updated = + (&existing_fields - &old_faceted_fields) != (&existing_fields - &new_faceted_fields); + + Ok(faceted_updated) + } } fn validate_prompt( From b50f5187648de83d3ed36d0f9b2fc2eb92cad95b Mon Sep 17 00:00:00 2001 From: dureuill Date: Wed, 27 Mar 2024 16:12:54 +0000 Subject: [PATCH 2/2] Update version for the next release (v1.7.4) in Cargo.toml --- Cargo.lock | 34 +++++++++++++++++----------------- Cargo.toml | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18858d021..aba12d3b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -494,7 +494,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "benchmarks" -version = "1.7.3" +version = "1.7.4" dependencies = [ "anyhow", "bytes", @@ -628,7 +628,7 @@ dependencies = [ [[package]] name = "build-info" -version = "1.7.3" +version = "1.7.4" dependencies = [ "anyhow", "time", @@ -1529,7 +1529,7 @@ dependencies = [ [[package]] name = "dump" -version = "1.7.3" +version = "1.7.4" dependencies = [ "anyhow", "big_s", @@ -1767,7 +1767,7 @@ dependencies = [ [[package]] name = "file-store" -version = "1.7.3" +version = "1.7.4" dependencies = [ "faux", "tempfile", @@ -1790,7 +1790,7 @@ dependencies = [ [[package]] name = "filter-parser" -version = "1.7.3" +version = "1.7.4" dependencies = [ "insta", "nom", @@ -1810,7 +1810,7 @@ dependencies = [ [[package]] name = "flatten-serde-json" -version = "1.7.3" +version = "1.7.4" dependencies = [ "criterion", "serde_json", @@ -1928,7 +1928,7 @@ dependencies = [ [[package]] name = "fuzzers" -version = "1.7.3" +version = "1.7.4" dependencies = [ "arbitrary", "clap", @@ -2420,7 +2420,7 @@ checksum = "206ca75c9c03ba3d4ace2460e57b189f39f43de612c2f85836e65c929701bb2d" [[package]] name = "index-scheduler" -version = "1.7.3" +version = "1.7.4" dependencies = [ "anyhow", "big_s", @@ -2607,7 +2607,7 @@ dependencies = [ [[package]] name = "json-depth-checker" -version = "1.7.3" +version = "1.7.4" dependencies = [ "criterion", "serde_json", @@ -3115,7 +3115,7 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "meili-snap" -version = "1.7.3" +version = "1.7.4" dependencies = [ "insta", "md5", @@ -3124,7 +3124,7 @@ dependencies = [ [[package]] name = "meilisearch" -version = "1.7.3" +version = "1.7.4" dependencies = [ "actix-cors", "actix-http", @@ -3217,7 +3217,7 @@ dependencies = [ [[package]] name = "meilisearch-auth" -version = "1.7.3" +version = "1.7.4" dependencies = [ "base64 0.21.7", "enum-iterator", @@ -3236,7 +3236,7 @@ dependencies = [ [[package]] name = "meilisearch-types" -version = "1.7.3" +version = "1.7.4" dependencies = [ "actix-web", "anyhow", @@ -3266,7 +3266,7 @@ dependencies = [ [[package]] name = "meilitool" -version = "1.7.3" +version = "1.7.4" dependencies = [ "anyhow", "clap", @@ -3305,7 +3305,7 @@ dependencies = [ [[package]] name = "milli" -version = "1.7.3" +version = "1.7.4" dependencies = [ "arroy", "big_s", @@ -3746,7 +3746,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "permissive-json-pointer" -version = "1.7.3" +version = "1.7.4" dependencies = [ "big_s", "serde_json", @@ -5941,7 +5941,7 @@ dependencies = [ [[package]] name = "xtask" -version = "1.7.3" +version = "1.7.4" dependencies = [ "anyhow", "build-info", diff --git a/Cargo.toml b/Cargo.toml index a3870851b..22774de9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ members = [ ] [workspace.package] -version = "1.7.3" +version = "1.7.4" authors = [ "Quentin de Quelen ", "Clément Renault ",