From 52591761af4c0ec73f05a88ab4bf163cccf7e512 Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Mon, 2 Jun 2025 15:32:32 +0300 Subject: [PATCH 1/3] tests: Faster search::geo IT tests Use shared server + unique indices Related-to: https://github.com/meilisearch/meilisearch/issues/4840 Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/search/geo.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/meilisearch/tests/search/geo.rs b/crates/meilisearch/tests/search/geo.rs index a314ca241..b74e4e9e4 100644 --- a/crates/meilisearch/tests/search/geo.rs +++ b/crates/meilisearch/tests/search/geo.rs @@ -43,8 +43,8 @@ static DOCUMENTS: Lazy = Lazy::new(|| { #[actix_rt::test] async fn geo_sort_with_geo_strings() { - let server = Server::new().await; - let index = server.index("test"); + let server = Server::new_shared(); + let index = server.unique_index(); let documents = DOCUMENTS.clone(); index.update_settings_filterable_attributes(json!(["_geo"])).await; @@ -59,7 +59,7 @@ async fn geo_sort_with_geo_strings() { "sort": ["_geoPoint(0.0, 0.0):asc"] }), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); }, ) .await; @@ -67,8 +67,8 @@ async fn geo_sort_with_geo_strings() { #[actix_rt::test] async fn geo_bounding_box_with_string_and_number() { - let server = Server::new().await; - let index = server.index("test"); + let server = Server::new_shared(); + let index = server.unique_index(); let documents = DOCUMENTS.clone(); index.update_settings_filterable_attributes(json!(["_geo"])).await; @@ -82,7 +82,7 @@ async fn geo_bounding_box_with_string_and_number() { "filter": "_geoBoundingBox([89, 179], [-89, -179])", }), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); snapshot!(json_string!(response, { ".processingTimeMs" => "[time]" }), @r###" { "hits": [ @@ -124,8 +124,8 @@ async fn geo_bounding_box_with_string_and_number() { #[actix_rt::test] async fn bug_4640() { // https://github.com/meilisearch/meilisearch/issues/4640 - let server = Server::new().await; - let index = server.index("test"); + let server = Server::new_shared(); + let index = server.unique_index(); let documents = DOCUMENTS.clone(); index.add_documents(documents, None).await; @@ -140,7 +140,7 @@ async fn bug_4640() { "sort": ["_geoPoint(45.4777599, 9.1967508):asc"], }), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); snapshot!(json_string!(response, { ".processingTimeMs" => "[time]" }), @r###" { "hits": [ @@ -203,7 +203,7 @@ async fn geo_asc_with_words() { &json!({"searchableAttributes": ["id", "doggo"], "rankingRules": ["words", "geo:asc"]}), &json!({"q": "jean"}), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); snapshot!(json_string!(response, { ".processingTimeMs" => "[time]" }), @r###" { "hits": [ @@ -248,7 +248,7 @@ async fn geo_asc_with_words() { &json!({"searchableAttributes": ["id", "doggo"], "rankingRules": ["words", "geo:asc"]}), &json!({"q": "bob"}), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); snapshot!(json_string!(response, { ".processingTimeMs" => "[time]" }), @r###" { "hits": [ @@ -285,7 +285,7 @@ async fn geo_asc_with_words() { &json!({"searchableAttributes": ["id", "doggo"], "rankingRules": ["words", "geo:asc"]}), &json!({"q": "intel"}), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); snapshot!(json_string!(response, { ".processingTimeMs" => "[time]" }), @r###" { "hits": [ @@ -325,7 +325,7 @@ async fn geo_sort_with_words() { &json!({"searchableAttributes": ["id", "doggo"], "rankingRules": ["words", "sort"], "sortableAttributes": [RESERVED_GEO_FIELD_NAME]}), &json!({"q": "jean", "sort": ["_geoPoint(0.0, 0.0):asc"]}), |response, code| { - assert_eq!(code, 200, "{}", response); + assert_eq!(code, 200, "{response}"); snapshot!(json_string!(response, { ".processingTimeMs" => "[time]" }), @r###" { "hits": [ From 41b1cd5a73ab8cb7643fbe30908bbff78f041ca7 Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Tue, 3 Jun 2025 13:08:12 +0300 Subject: [PATCH 2/3] Extract GEO_DOCUMENTS static variable and shared index with these docs Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/common/mod.rs | 54 ++++++++++++++++++++++ crates/meilisearch/tests/search/geo.rs | 63 ++------------------------ 2 files changed, 58 insertions(+), 59 deletions(-) diff --git a/crates/meilisearch/tests/common/mod.rs b/crates/meilisearch/tests/common/mod.rs index 046519a0e..9823bf483 100644 --- a/crates/meilisearch/tests/common/mod.rs +++ b/crates/meilisearch/tests/common/mod.rs @@ -453,3 +453,57 @@ pub async fn shared_index_with_test_set() -> &'static Index<'static, Shared> { }) .await } + +pub static GEO_DOCUMENTS: Lazy = Lazy::new(|| { + json!([ + { + "id": 1, + "name": "Taco Truck", + "address": "444 Salsa Street, Burritoville", + "type": "Mexican", + "rating": 9, + "_geo": { + "lat": 34.0522, + "lng": -118.2437 + } + }, + { + "id": 2, + "name": "La Bella Italia", + "address": "456 Elm Street, Townsville", + "type": "Italian", + "rating": 9, + "_geo": { + "lat": "45.4777599", + "lng": "9.1967508" + } + }, + { + "id": 3, + "name": "Crêpe Truck", + "address": "2 Billig Avenue, Rouenville", + "type": "French", + "rating": 10 + } + ]) +}); + +pub async fn shared_index_with_geo_documents() -> &'static Index<'static, Shared> { + static INDEX: OnceCell> = OnceCell::const_new(); + INDEX + .get_or_init(|| async { + let server = Server::new_shared(); + let index = server._index("SHARED_GEO_DOCUMENTS").to_shared(); + let (response, _code) = index._add_documents(GEO_DOCUMENTS.clone(), None).await; + index.wait_task(response.uid()).await.succeeded(); + + let (response, _code) = index + ._update_settings( + json!({"filterableAttributes": ["_geo"], "sortableAttributes": ["_geo"]}), + ) + .await; + index.wait_task(response.uid()).await.succeeded(); + index + }) + .await +} diff --git a/crates/meilisearch/tests/search/geo.rs b/crates/meilisearch/tests/search/geo.rs index b74e4e9e4..5e731ffde 100644 --- a/crates/meilisearch/tests/search/geo.rs +++ b/crates/meilisearch/tests/search/geo.rs @@ -2,55 +2,14 @@ use meili_snap::{json_string, snapshot}; use meilisearch_types::milli::constants::RESERVED_GEO_FIELD_NAME; use once_cell::sync::Lazy; -use crate::common::{Server, Value}; +use crate::common::shared_index_with_geo_documents; use crate::json; use super::test_settings_documents_indexing_swapping_and_search; -static DOCUMENTS: Lazy = Lazy::new(|| { - json!([ - { - "id": 1, - "name": "Taco Truck", - "address": "444 Salsa Street, Burritoville", - "type": "Mexican", - "rating": 9, - "_geo": { - "lat": 34.0522, - "lng": -118.2437 - } - }, - { - "id": 2, - "name": "La Bella Italia", - "address": "456 Elm Street, Townsville", - "type": "Italian", - "rating": 9, - "_geo": { - "lat": "45.4777599", - "lng": "9.1967508" - } - }, - { - "id": 3, - "name": "Crêpe Truck", - "address": "2 Billig Avenue, Rouenville", - "type": "French", - "rating": 10 - } - ]) -}); - #[actix_rt::test] async fn geo_sort_with_geo_strings() { - let server = Server::new_shared(); - let index = server.unique_index(); - - let documents = DOCUMENTS.clone(); - index.update_settings_filterable_attributes(json!(["_geo"])).await; - index.update_settings_sortable_attributes(json!(["_geo"])).await; - let (task, _status_code) = index.add_documents(documents, None).await; - index.wait_task(task.uid()).await.succeeded(); + let index = shared_index_with_geo_documents().await; index .search( @@ -67,14 +26,7 @@ async fn geo_sort_with_geo_strings() { #[actix_rt::test] async fn geo_bounding_box_with_string_and_number() { - let server = Server::new_shared(); - let index = server.unique_index(); - - let documents = DOCUMENTS.clone(); - index.update_settings_filterable_attributes(json!(["_geo"])).await; - index.update_settings_sortable_attributes(json!(["_geo"])).await; - let (ret, _code) = index.add_documents(documents, None).await; - index.wait_task(ret.uid()).await.succeeded(); + let index = shared_index_with_geo_documents().await; index .search( @@ -124,14 +76,7 @@ async fn geo_bounding_box_with_string_and_number() { #[actix_rt::test] async fn bug_4640() { // https://github.com/meilisearch/meilisearch/issues/4640 - let server = Server::new_shared(); - let index = server.unique_index(); - - let documents = DOCUMENTS.clone(); - index.add_documents(documents, None).await; - index.update_settings_filterable_attributes(json!(["_geo"])).await; - let (ret, _code) = index.update_settings_sortable_attributes(json!(["_geo"])).await; - index.wait_task(ret.uid()).await.succeeded(); + let index = shared_index_with_geo_documents().await; // Sort the document with the second one first index From 70aa78a2c2c5aa0bff68f2d5caa81f8de82ef724 Mon Sep 17 00:00:00 2001 From: Martin Tzvetanov Grigorov Date: Tue, 3 Jun 2025 14:04:15 +0300 Subject: [PATCH 3/3] Remove unused import Signed-off-by: Martin Tzvetanov Grigorov --- crates/meilisearch/tests/search/geo.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/meilisearch/tests/search/geo.rs b/crates/meilisearch/tests/search/geo.rs index 5e731ffde..5f4eff947 100644 --- a/crates/meilisearch/tests/search/geo.rs +++ b/crates/meilisearch/tests/search/geo.rs @@ -1,6 +1,5 @@ use meili_snap::{json_string, snapshot}; use meilisearch_types::milli::constants::RESERVED_GEO_FIELD_NAME; -use once_cell::sync::Lazy; use crate::common::shared_index_with_geo_documents; use crate::json;