From 19d83ec49b064809d2de50b21270a4a7b2f49dd8 Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 22 Jul 2025 19:44:57 +0200 Subject: [PATCH 1/3] update `rankingScoreThreshold` warning --- reference/api/search.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reference/api/search.mdx b/reference/api/search.mdx index c5aeafa0ba..0ac6269a80 100644 --- a/reference/api/search.mdx +++ b/reference/api/search.mdx @@ -1141,7 +1141,9 @@ Excludes results below the specified ranking score. Excluded results do not count towards `estimatedTotalHits`, `totalHits`, and facet distribution. -For performance reasons, if the number of documents above `rankingScoreThreshold` is higher than `limit`, Meilisearch does not evaluate the ranking score of the remaining documents. Results ranking below the threshold are not immediately removed from the set of candidates. In this case, Meilisearch may overestimate the count of `estimatedTotalHits`, `totalHits` and facet distribution. +When using `rankingScoreThreshold`, queries paginating results with `limit` and `offset` may exaggerate the count of `estimatedTotalHits`. For performance reasons, if the number of documents above `rankingScoreThreshold` is higher than `limit`, Meilisearch does not evaluate the ranking score of the remaining documents. Results ranking below the threshold are not immediately removed from the set of candidates. + +Queries using `page` and `hitsPerPage` are unnaffected by this issue and `totalHits` should always display the correct total number of search results. #### Example From d294682432e1b5e8d4765027bfdf1f6d7ad3e62a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 22 Jul 2025 17:45:32 +0000 Subject: [PATCH 2/3] Update code samples [skip ci] --- .../code_samples_add_movies_json_1.mdx | 2 +- ...ode_samples_add_or_replace_documents_1.mdx | 2 +- ...code_samples_add_or_update_documents_1.mdx | 2 +- ...les_date_guide_filterable_attributes_1.mdx | 2 +- .../code_samples_date_guide_index_1.mdx | 2 +- ..._distinct_attribute_guide_filterable_1.mdx | 2 +- .../samples/code_samples_facet_search_3.mdx | 1 + ...mples_faceted_search_update_settings_1.mdx | 2 +- ...de_samples_filtering_update_settings_1.mdx | 2 +- ...ples_geosearch_guide_filter_settings_1.mdx | 2 +- ..._samples_getting_started_add_documents.mdx | 4 ++-- ...samples_getting_started_add_meteorites.mdx | 2 +- ...code_samples_landing_getting_started_1.mdx | 2 +- ...y_field_guide_add_document_primary_key.mdx | 3 ++- .../code_samples_typo_tolerance_guide_5.mdx | 6 +++++ ...samples_update_filterable_attributes_1.mdx | 22 ++++++++++++++++++- 16 files changed, 43 insertions(+), 15 deletions(-) diff --git a/snippets/samples/code_samples_add_movies_json_1.mdx b/snippets/samples/code_samples_add_movies_json_1.mdx index 414246df01..068206c70c 100644 --- a/snippets/samples/code_samples_add_movies_json_1.mdx +++ b/snippets/samples/code_samples_add_movies_json_1.mdx @@ -59,7 +59,7 @@ file, _ := os.ReadFile("movies.json") var movies interface{} json.Unmarshal([]byte(file), &movies) -client.Index("movies").AddDocuments(&movies) +client.Index("movies").AddDocuments(&movies, nil) ``` ```csharp C# diff --git a/snippets/samples/code_samples_add_or_replace_documents_1.mdx b/snippets/samples/code_samples_add_or_replace_documents_1.mdx index 13ae38b9dc..7d9fb5a7f1 100644 --- a/snippets/samples/code_samples_add_or_replace_documents_1.mdx +++ b/snippets/samples/code_samples_add_or_replace_documents_1.mdx @@ -80,7 +80,7 @@ documents := []map[string]interface{}{ "release_date": "2019-03-23", }, } -client.Index("movies").AddDocuments(documents) +client.Index("movies").AddDocuments(documents, nil) ``` ```csharp C# diff --git a/snippets/samples/code_samples_add_or_update_documents_1.mdx b/snippets/samples/code_samples_add_or_update_documents_1.mdx index a3c1cd3dda..53a1dd5260 100644 --- a/snippets/samples/code_samples_add_or_update_documents_1.mdx +++ b/snippets/samples/code_samples_add_or_update_documents_1.mdx @@ -66,7 +66,7 @@ documents := []map[string]interface{}{ "genres": "comedy", }, } -client.Index("movies").UpdateDocuments(documents) +client.Index("movies").UpdateDocuments(documents, nil) ``` ```csharp C# diff --git a/snippets/samples/code_samples_date_guide_filterable_attributes_1.mdx b/snippets/samples/code_samples_date_guide_filterable_attributes_1.mdx index 2fe51dc2b2..98595a358c 100644 --- a/snippets/samples/code_samples_date_guide_filterable_attributes_1.mdx +++ b/snippets/samples/code_samples_date_guide_filterable_attributes_1.mdx @@ -30,7 +30,7 @@ client.index('games').update_filterable_attributes(['release_timestamp']) ``` ```go Go -filterableAttributes := []string{"release_timestamp"} +filterableAttributes := []interface{}{"release_timestamp"} client.Index("games").UpdateFilterableAttributes(&filterableAttributes) ``` diff --git a/snippets/samples/code_samples_date_guide_index_1.mdx b/snippets/samples/code_samples_date_guide_index_1.mdx index 1f22bd3bd0..4f89b156e7 100644 --- a/snippets/samples/code_samples_date_guide_index_1.mdx +++ b/snippets/samples/code_samples_date_guide_index_1.mdx @@ -54,7 +54,7 @@ byteValue, _ := io.ReadAll(jsonFile) var games []map[string]interface{} json.Unmarshal(byteValue, &games) -client.Index("games").AddDocuments(games) +client.Index("games").AddDocuments(games, nil) ``` ```csharp C# diff --git a/snippets/samples/code_samples_distinct_attribute_guide_filterable_1.mdx b/snippets/samples/code_samples_distinct_attribute_guide_filterable_1.mdx index 60e30700be..7412dfadb6 100644 --- a/snippets/samples/code_samples_distinct_attribute_guide_filterable_1.mdx +++ b/snippets/samples/code_samples_distinct_attribute_guide_filterable_1.mdx @@ -38,7 +38,7 @@ client.index('products').update_filterable_attributes([ ``` ```go Go -filterableAttributes := []string{ +filterableAttributes := []interface{}{ "product_id", "sku", "url", diff --git a/snippets/samples/code_samples_facet_search_3.mdx b/snippets/samples/code_samples_facet_search_3.mdx index f67d373024..70c2bcdc9d 100644 --- a/snippets/samples/code_samples_facet_search_3.mdx +++ b/snippets/samples/code_samples_facet_search_3.mdx @@ -42,6 +42,7 @@ client.index('books').facet_search('genres', 'c') client.Index("books").FacetSearch(&meilisearch.FacetSearchRequest{ FacetQuery: "c", FacetName: "genres", + ExhaustiveFacetCount: true }) ``` diff --git a/snippets/samples/code_samples_faceted_search_update_settings_1.mdx b/snippets/samples/code_samples_faceted_search_update_settings_1.mdx index 9c7b7d2430..7b5255a440 100644 --- a/snippets/samples/code_samples_faceted_search_update_settings_1.mdx +++ b/snippets/samples/code_samples_faceted_search_update_settings_1.mdx @@ -34,7 +34,7 @@ client.index('movie_ratings').update_filterable_attributes(['genres', 'rating', ``` ```go Go -filterableAttributes := []string{ +filterableAttributes := []interface{}{ "genres", "rating", "language", diff --git a/snippets/samples/code_samples_filtering_update_settings_1.mdx b/snippets/samples/code_samples_filtering_update_settings_1.mdx index b73c1095ba..9ecaed4cf9 100644 --- a/snippets/samples/code_samples_filtering_update_settings_1.mdx +++ b/snippets/samples/code_samples_filtering_update_settings_1.mdx @@ -47,7 +47,7 @@ client.index('movies').update_filterable_attributes([ ``` ```go Go -resp, err := client.Index("movies").UpdateFilterableAttributes(&[]string{ +resp, err := client.Index("movies").UpdateFilterableAttributes(&[]interface{}{ "director", "genres", }) diff --git a/snippets/samples/code_samples_geosearch_guide_filter_settings_1.mdx b/snippets/samples/code_samples_geosearch_guide_filter_settings_1.mdx index 79aa98f987..32732e6004 100644 --- a/snippets/samples/code_samples_geosearch_guide_filter_settings_1.mdx +++ b/snippets/samples/code_samples_geosearch_guide_filter_settings_1.mdx @@ -37,7 +37,7 @@ client.index('restaurants').update_filterable_attributes(['_geo']) ``` ```go Go -filterableAttributes := []string{ +filterableAttributes := []interface{}{ "_geo", } client.Index("restaurants").UpdateFilterableAttributes(&filterableAttributes) diff --git a/snippets/samples/code_samples_getting_started_add_documents.mdx b/snippets/samples/code_samples_getting_started_add_documents.mdx index 3aef704a28..9a2a53b200 100644 --- a/snippets/samples/code_samples_getting_started_add_documents.mdx +++ b/snippets/samples/code_samples_getting_started_add_documents.mdx @@ -140,7 +140,7 @@ func main() { var movies []map[string]interface{} json.Unmarshal(byteValue, &movies) - _, err := client.Index("movies").AddDocuments(movies) + _, err := client.Index("movies").AddDocuments(movies, nil) if err != nil { panic(err) } @@ -192,7 +192,7 @@ namespace Meilisearch_demo ```text Rust // In your .toml file: [dependencies] - meilisearch-sdk = "0.29.0" + meilisearch-sdk = "0.29.1" # futures: because we want to block on futures futures = "0.3" # serde: required if you are going to use documents diff --git a/snippets/samples/code_samples_getting_started_add_meteorites.mdx b/snippets/samples/code_samples_getting_started_add_meteorites.mdx index 90a4cf556a..77373581e9 100644 --- a/snippets/samples/code_samples_getting_started_add_meteorites.mdx +++ b/snippets/samples/code_samples_getting_started_add_meteorites.mdx @@ -60,7 +60,7 @@ byteValue, _ := io.ReadAll(jsonFile) var meteorites []map[string]interface{} json.Unmarshal(byteValue, &meteorites) -client.Index("meteorites").AddDocuments(meteorites) +client.Index("meteorites").AddDocuments(meteorites, nil) ``` ```csharp C# diff --git a/snippets/samples/code_samples_landing_getting_started_1.mdx b/snippets/samples/code_samples_landing_getting_started_1.mdx index 49d15df9ec..b353fed743 100644 --- a/snippets/samples/code_samples_landing_getting_started_1.mdx +++ b/snippets/samples/code_samples_landing_getting_started_1.mdx @@ -81,7 +81,7 @@ documents := []map[string]interface{}{ { "id": 5, "title": "Moana" }, { "id": 6, "title": "Philadelphia" }, } -client.Index("movies").AddDocuments(documents) +client.Index("movies").AddDocuments(documents, nil) ``` ```csharp C# diff --git a/snippets/samples/code_samples_primary_field_guide_add_document_primary_key.mdx b/snippets/samples/code_samples_primary_field_guide_add_document_primary_key.mdx index 1c30ac8015..6d8ecc6272 100644 --- a/snippets/samples/code_samples_primary_field_guide_add_document_primary_key.mdx +++ b/snippets/samples/code_samples_primary_field_guide_add_document_primary_key.mdx @@ -85,7 +85,8 @@ documents := []map[string]interface{}{ "price": 5.00, }, } -client.Index("books").AddDocuments(documents, "reference_number") +refrenceNumber := "reference_number" +client.Index("books").AddDocuments(documents, &refrenceNumber) ``` ```csharp C# diff --git a/snippets/samples/code_samples_typo_tolerance_guide_5.mdx b/snippets/samples/code_samples_typo_tolerance_guide_5.mdx index 6733ece79f..55582c22bf 100644 --- a/snippets/samples/code_samples_typo_tolerance_guide_5.mdx +++ b/snippets/samples/code_samples_typo_tolerance_guide_5.mdx @@ -26,4 +26,10 @@ $client->index('movies')->updateTypoTolerance([ 'disableOnNumbers' => true ]); ``` + +```go Go +client.Index("movies").UpdateTypoTolerance(&meilisearch.TypoTolerance{ + DisableOnNumbers: true +}) +``` \ No newline at end of file diff --git a/snippets/samples/code_samples_update_filterable_attributes_1.mdx b/snippets/samples/code_samples_update_filterable_attributes_1.mdx index e5319e8fef..280180ef98 100644 --- a/snippets/samples/code_samples_update_filterable_attributes_1.mdx +++ b/snippets/samples/code_samples_update_filterable_attributes_1.mdx @@ -71,9 +71,29 @@ client.index('movies').update_filterable_attributes([ ``` ```go Go -filterableAttributes := []string{ +filterableAttributes := []interface{}{ "genres", "director", + AttributeRule{ + AttributePatterns: []string{"tag"} + Features: AttributeFeatures{ + FacetSearch: false, + Filter: FilterFeatures{ + Equality: true, + Comparison: false, + } + } + }, + map[string]interface{}{ + "attributePatterns": []interface{}{"year"} + "features": map[string]interface{}{ + "facetSearch": false, + "filter": map[string]interface{}{ + "equality": true, + "comparison": true, + } + } + } } client.Index("movies").UpdateFilterableAttributes(&filterableAttributes) ``` From bb927608cf2304a1ae9a8aa776f5855b2b5177cd Mon Sep 17 00:00:00 2001 From: gui machiavelli Date: Tue, 29 Jul 2025 14:15:46 +0200 Subject: [PATCH 3/3] Update reference/api/search.mdx Co-authored-by: Mubelotix --- reference/api/search.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reference/api/search.mdx b/reference/api/search.mdx index 0ac6269a80..f8eadca888 100644 --- a/reference/api/search.mdx +++ b/reference/api/search.mdx @@ -1141,9 +1141,9 @@ Excludes results below the specified ranking score. Excluded results do not count towards `estimatedTotalHits`, `totalHits`, and facet distribution. -When using `rankingScoreThreshold`, queries paginating results with `limit` and `offset` may exaggerate the count of `estimatedTotalHits`. For performance reasons, if the number of documents above `rankingScoreThreshold` is higher than `limit`, Meilisearch does not evaluate the ranking score of the remaining documents. Results ranking below the threshold are not immediately removed from the set of candidates. +Using `rankingScoreThreshold` with `page` and `hitsPerPage` forces Meilisearch to evaluate the ranking score of all matching documents to return an accurate `totalHits`. This may negatively impact search performance. -Queries using `page` and `hitsPerPage` are unnaffected by this issue and `totalHits` should always display the correct total number of search results. +Queries with `limit` and `offset` avoid this overhead when using `rankingScoreThreshold`. #### Example