From ca4876fd1026d5a3dfc96ffb479237144a26097e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Tue, 12 Mar 2024 16:18:58 +0100 Subject: [PATCH] Do not reindex when modifying unknown faceted field --- milli/src/update/settings.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/milli/src/update/settings.rs b/milli/src/update/settings.rs index 3cad79467..2f53718ac 100644 --- a/milli/src/update/settings.rs +++ b/milli/src/update/settings.rs @@ -1032,6 +1032,13 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { { self.index.set_updated_at(self.wtxn, &OffsetDateTime::now_utc())?; + 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)?; @@ -1052,7 +1059,8 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> { // 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 = old_faceted_fields != new_faceted_fields; + let faceted_updated = + (&existing_fields - &old_faceted_fields) != (&existing_fields - &new_faceted_fields); let stop_words_updated = self.update_stop_words()?; let non_separator_tokens_updated = self.update_non_separator_tokens()?;