From 43875e6758ab434c044cf9564852b7789eb88159 Mon Sep 17 00:00:00 2001 From: Tamo Date: Mon, 17 Jun 2024 15:59:30 +0200 Subject: [PATCH] fix bug around nested fields --- meilisearch/tests/search/distinct.rs | 24 ++++++++++++++---------- milli/src/search/mod.rs | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/meilisearch/tests/search/distinct.rs b/meilisearch/tests/search/distinct.rs index 68f7f18e8..2023c01a8 100644 --- a/meilisearch/tests/search/distinct.rs +++ b/meilisearch/tests/search/distinct.rs @@ -280,23 +280,27 @@ async fn distinct_at_search_time() { let documents = NESTED_DOCUMENTS.clone(); index.add_documents(documents, Some(DOCUMENT_PRIMARY_KEY)).await; - index.update_settings_filterable_attributes(json!(["color"])).await; - index.wait_task(1).await; + let (task, _) = index.update_settings_filterable_attributes(json!(["color.main"])).await; + let task = index.wait_task(task.uid()).await; + snapshot!(task, name: "succeed"); - fn get_hits(response: &Value) -> Vec<&str> { + fn get_hits(response: &Value) -> Vec { let hits_array = response["hits"] .as_array() .unwrap_or_else(|| panic!("{}", &serde_json::to_string_pretty(&response).unwrap())); - hits_array.iter().map(|h| h[DOCUMENT_DISTINCT_KEY].as_str().unwrap()).collect::>() + hits_array + .iter() + .map(|h| h[DOCUMENT_PRIMARY_KEY].as_number().unwrap().to_string()) + .collect::>() } let (response, code) = - index.search_post(json!({"page": 0, "hitsPerPage": 2, "distinct": "color.main"})).await; + index.search_post(json!({"page": 1, "hitsPerPage": 3, "distinct": "color.main"})).await; let hits = get_hits(&response); snapshot!(code, @"200 OK"); - snapshot!(hits.len(), @"0"); - snapshot!(format!("{:?}", hits), @r#"[]"#); - snapshot!(response["page"], @"0"); - snapshot!(response["totalPages"], @"3"); - snapshot!(response["totalHits"], @"6"); + snapshot!(hits.len(), @"3"); + snapshot!(format!("{:?}", hits), @r###"["1", "2", "3"]"###); + snapshot!(response["page"], @"1"); + snapshot!(response["totalPages"], @"1"); + snapshot!(response["totalHits"], @"3"); } diff --git a/milli/src/search/mod.rs b/milli/src/search/mod.rs index 922b72d04..bf488f9f0 100644 --- a/milli/src/search/mod.rs +++ b/milli/src/search/mod.rs @@ -178,7 +178,7 @@ impl<'a> Search<'a> { if let Some(distinct) = &self.distinct { let filterable_fields = ctx.index.filterable_fields(ctx.txn)?; - if !filterable_fields.contains(distinct) { + if !crate::is_faceted(distinct, &filterable_fields) { let (valid_fields, hidden_fields) = ctx.index.remove_hidden_fields(ctx.txn, filterable_fields)?; return Err(Error::UserError(UserError::InvalidDistinctAttribute {