diff --git a/meilisearch/src/routes/indexes/documents.rs b/meilisearch/src/routes/indexes/documents.rs index a0e6b167e..91d214c61 100644 --- a/meilisearch/src/routes/indexes/documents.rs +++ b/meilisearch/src/routes/indexes/documents.rs @@ -152,7 +152,7 @@ pub struct BrowseQuery { #[deserr(default = PAGINATION_DEFAULT_LIMIT, error = DeserrJsonError)] limit: usize, #[deserr(default, error = DeserrJsonError)] - fields: OptionStarOrList, + fields: Option>, #[deserr(default, error = DeserrJsonError)] filter: Option, } @@ -184,7 +184,12 @@ pub async fn get_documents( None => None, }; - let query = BrowseQuery { offset: offset.0, limit: limit.0, fields, filter }; + let query = BrowseQuery { + offset: offset.0, + limit: limit.0, + fields: fields.merge_star_and_none(), + filter, + }; documents_by_query(&index_scheduler, index_uid, query) } @@ -196,11 +201,9 @@ fn documents_by_query( ) -> Result { let index_uid = IndexUid::try_from(index_uid.into_inner())?; let BrowseQuery { offset, limit, fields, filter } = query; - let attributes_to_retrieve = fields.merge_star_and_none(); let index = index_scheduler.index(&index_uid)?; - let (total, documents) = - retrieve_documents(&index, offset, limit, filter, attributes_to_retrieve)?; + let (total, documents) = retrieve_documents(&index, offset, limit, filter, fields)?; let ret = PaginationView::new(offset, limit, total as usize, documents); diff --git a/meilisearch/tests/documents/errors.rs b/meilisearch/tests/documents/errors.rs index edf9c0709..2ed70f9fc 100644 --- a/meilisearch/tests/documents/errors.rs +++ b/meilisearch/tests/documents/errors.rs @@ -726,11 +726,11 @@ async fn fetch_document_by_filter() { } "###); - let (response, code) = index.get_document_by_filter(json!({ "fields": ["doggo"] })).await; + let (response, code) = index.get_document_by_filter(json!({ "fields": "doggo" })).await; snapshot!(code, @"400 Bad Request"); snapshot!(json_string!(response), @r###" { - "message": "Invalid value type at `.fields`: expected a string, but found an array: `[\"doggo\"]`", + "message": "Invalid value type at `.fields`: expected an array, but found a string: `\"doggo\"`", "code": "invalid_document_get_fields", "type": "invalid_request", "link": "https://docs.meilisearch.com/errors#invalid_document_get_fields" diff --git a/meilisearch/tests/documents/get_documents.rs b/meilisearch/tests/documents/get_documents.rs index c4c49fc2f..7e6c5a2a9 100644 --- a/meilisearch/tests/documents/get_documents.rs +++ b/meilisearch/tests/documents/get_documents.rs @@ -473,7 +473,9 @@ async fn get_document_by_filter() { assert_eq!(response, response2); let (response, code) = index - .get_document_by_filter(json!({ "limit": 1, "filter": "color != blue", "fields": "color" })) + .get_document_by_filter( + json!({ "limit": 1, "filter": "color != blue", "fields": ["color"] }), + ) .await; let (response2, code2) = index.get_all_documents_raw("?limit=1&filter=color!=blue&fields=color").await;