diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index d397b469..f793d026 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -1671,6 +1671,42 @@ reset_proximity_precision_settings_1: |- .reset_proximity_precision() .await .unwrap(); +get_facet_search_settings_1: |- + let facet_search: bool = client + .index(INDEX_UID) + .get_facet_search() + .await + .unwrap(); +update_facet_search_settings_1: |- + let task: TaskInfo = client + .index(INDEX_UID) + .set_facet_search(false) + .await + .unwrap(); +reset_facet_search_settings_1: |- + let task: TaskInfo = client + .index(INDEX_UID) + .reset_facet_search() + .await + .unwrap(); +get_prefix_search_settings_1: |- + let prefix_search: PrefixSearchSettings = client + .index(INDEX_UID) + .get_prefix_search() + .await + .unwrap(); +update_prefix_search_settings_1: |- + let task: TaskInfo = client + .index(INDEX_UID) + .set_prefix_search(PrefixSearchSettings::Disabled) + .await + .unwrap(); +reset_prefix_search_settings_1: |- + let task: TaskInfo = client + .index(INDEX_UID) + .reset_prefix_search() + .await + .unwrap(); facet_search_1: |- let res = client.index("books") .facet_search("genres") diff --git a/src/key.rs b/src/key.rs index 312bbc27..5a6366f8 100644 --- a/src/key.rs +++ b/src/key.rs @@ -651,7 +651,7 @@ impl AsRef for KeyBuilder { } } -#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)] pub enum Action { /// Provides access to everything. #[serde(rename = "*")] @@ -713,8 +713,13 @@ pub enum Action { /// Provides access to the [delete key](https://www.meilisearch.com/docs/reference/api/keys#delete-a-key) endpoint. #[serde(rename = "keys.delete")] KeyDelete, + /// Provides access to chat completions endpoints. #[serde(rename = "chatCompletions")] ChatCompletions, + /// Any other value that might be added to Meilisearch in the future but that is not supported by this SDK. + /// If you see one, please open a PR + #[serde(untagged)] + Unknown(String), } #[derive(Debug, Clone, Deserialize)] diff --git a/src/settings.rs b/src/settings.rs index d3affcb5..ba1c05e2 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -37,6 +37,23 @@ pub enum FacetSortValue { Count, } +#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)] +#[serde(rename_all = "camelCase")] +pub enum PrefixSearchSettings { + /// Calculate prefix search during indexing. + /// This is the default behavior + IndexingTime, + + /// Do not calculate prefix search. + /// May speed up indexing, but will severely impact search result relevancy + Disabled, + + /// Any other value that might be added to Meilisearch in the future but that is not supported by this SDK. + /// If you see one, please open a PR + #[serde(untagged)] + Unknown(String), +} + #[derive(Serialize, Deserialize, Default, Debug, Clone, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct FacetingSettings { @@ -933,6 +950,72 @@ impl Index { .await } + /// Get [facet-search settings](https://www.meilisearch.com/docs/reference/api/settings#facet-search) of the [Index]. + /// + /// # Example + /// + /// ``` + /// # use meilisearch_sdk::{client::*, indexes::*}; + /// # + /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700"); + /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey"); + /// # + /// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + /// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap(); + /// # client.create_index("get_facet_search", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// let index = client.index("get_facet_search"); + /// + /// let facet_search = index.get_facet_search().await.unwrap(); + /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// # }); + /// ``` + pub async fn get_facet_search(&self) -> Result { + self.client + .http_client + .request::<(), (), bool>( + &format!( + "{}/indexes/{}/settings/facet-search", + self.client.host, self.uid + ), + Method::Get { query: () }, + 200, + ) + .await + } + + /// Get [prefix-search settings](https://www.meilisearch.com/docs/reference/api/settings#prefix-search) of the [Index]. + /// + /// # Example + /// + /// ``` + /// # use meilisearch_sdk::{client::*, indexes::*}; + /// # + /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700"); + /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey"); + /// # + /// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + /// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap(); + /// # client.create_index("get_prefix_search", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// let index = client.index("get_prefix_search"); + /// + /// let prefix_search = index.get_prefix_search().await.unwrap(); + /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// # }); + /// ``` + pub async fn get_prefix_search(&self) -> Result { + self.client + .http_client + .request::<(), (), PrefixSearchSettings>( + &format!( + "{}/indexes/{}/settings/prefix-search", + self.client.host, self.uid + ), + Method::Get { query: () }, + 200, + ) + .await + } + /// Get [typo tolerance](https://www.meilisearch.com/docs/reference/api/settings#typo-tolerance) of the [Index]. /// /// ``` @@ -1859,6 +1942,81 @@ impl Index { .await } + /// Update [facet-search settings](https://www.meilisearch.com/docs/reference/api/settings#facet-search) settings of the [Index]. + /// + /// # Example + /// + /// ``` + /// # use meilisearch_sdk::{client::*, indexes::*, settings::Settings}; + /// # + /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700"); + /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey"); + /// # + /// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + /// let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap(); + /// # client.create_index("set_facet_search", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// let mut index = client.index("set_facet_search"); + /// + /// let task = index.set_facet_search(false).await.unwrap(); + /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// # }); + /// ``` + pub async fn set_facet_search(&self, facet_search: bool) -> Result { + self.client + .http_client + .request::<(), bool, TaskInfo>( + &format!( + "{}/indexes/{}/settings/facet-search", + self.client.host, self.uid + ), + Method::Put { + query: (), + body: facet_search, + }, + 202, + ) + .await + } + + /// update [prefix-search settings](https://www.meilisearch.com/docs/reference/api/settings#prefix-search) settings of the [Index]. + /// + /// # Example + /// + /// ``` + /// # use meilisearch_sdk::{client::*, indexes::*, settings::{Settings, PrefixSearchSettings}}; + /// # + /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700"); + /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey"); + /// # + /// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + /// let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap(); + /// # client.create_index("set_prefix_search", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// let mut index = client.index("set_prefix_search"); + /// + /// let task = index.set_prefix_search(PrefixSearchSettings::Disabled).await.unwrap(); + /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// # }); + /// ``` + pub async fn set_prefix_search( + &self, + prefix_search: PrefixSearchSettings, + ) -> Result { + self.client + .http_client + .request::<(), PrefixSearchSettings, TaskInfo>( + &format!( + "{}/indexes/{}/settings/prefix-search", + self.client.host, self.uid + ), + Method::Put { + query: (), + body: prefix_search, + }, + 202, + ) + .await + } + /// Update [search cutoff](https://www.meilisearch.com/docs/reference/api/settings#search-cutoff) settings of the [Index]. /// /// # Example @@ -2435,6 +2593,72 @@ impl Index { .await } + /// Reset [facet-search settings](https://www.meilisearch.com/docs/reference/api/settings#facet-search) settings of the [Index]. + /// + /// # Example + /// + /// ``` + /// # use meilisearch_sdk::{client::*, indexes::*, settings::Settings}; + /// # + /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700"); + /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey"); + /// # + /// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + /// let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap(); + /// # client.create_index("reset_facet_search", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// let mut index = client.index("reset_facet_search"); + /// + /// let task = index.reset_facet_search().await.unwrap(); + /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// # }); + /// ``` + pub async fn reset_facet_search(&self) -> Result { + self.client + .http_client + .request::<(), (), TaskInfo>( + &format!( + "{}/indexes/{}/settings/facet-search", + self.client.host, self.uid + ), + Method::Delete { query: () }, + 202, + ) + .await + } + + /// Reset [prefix-search settings](https://www.meilisearch.com/docs/reference/api/settings#prefix-search) settings of the [Index]. + /// + /// # Example + /// + /// ``` + /// # use meilisearch_sdk::{client::*, indexes::*, settings::Settings}; + /// # + /// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700"); + /// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey"); + /// # + /// # tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + /// let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY)).unwrap(); + /// # client.create_index("reset_prefix_search", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// let mut index = client.index("reset_prefix_search"); + /// + /// let task = index.reset_prefix_search().await.unwrap(); + /// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap(); + /// # }); + /// ``` + pub async fn reset_prefix_search(&self) -> Result { + self.client + .http_client + .request::<(), (), TaskInfo>( + &format!( + "{}/indexes/{}/settings/prefix-search", + self.client.host, self.uid + ), + Method::Delete { query: () }, + 202, + ) + .await + } + /// Reset [search cutoff](https://www.meilisearch.com/docs/reference/api/settings#search-cutoff) settings of the [Index]. /// /// # Example @@ -2933,6 +3157,84 @@ mod tests { assert_eq!(expected, default); } + #[meilisearch_test] + async fn test_get_facet_search(index: Index) { + let expected = true; + + let res = index.get_facet_search().await.unwrap(); + + assert_eq!(expected, res); + } + + #[meilisearch_test] + async fn test_set_facet_search(client: Client, index: Index) { + let expected = false; + + let task_info = index.set_facet_search(false).await.unwrap(); + client.wait_for_task(task_info, None, None).await.unwrap(); + + let res = index.get_facet_search().await.unwrap(); + + assert_eq!(expected, res); + } + + #[meilisearch_test] + async fn test_reset_facet_search(index: Index) { + let expected = true; + + let task = index.set_facet_search(false).await.unwrap(); + index.wait_for_task(task, None, None).await.unwrap(); + + let reset_task = index.reset_facet_search().await.unwrap(); + index.wait_for_task(reset_task, None, None).await.unwrap(); + + let default = index.get_facet_search().await.unwrap(); + + assert_eq!(expected, default); + } + + #[meilisearch_test] + async fn test_get_prefix_search(index: Index) { + let expected = PrefixSearchSettings::IndexingTime; + + let res = index.get_prefix_search().await.unwrap(); + + assert_eq!(expected, res); + } + + #[meilisearch_test] + async fn test_set_prefix_search(client: Client, index: Index) { + let expected = PrefixSearchSettings::Disabled; + + let task_info = index + .set_prefix_search(PrefixSearchSettings::Disabled) + .await + .unwrap(); + client.wait_for_task(task_info, None, None).await.unwrap(); + + let res = index.get_prefix_search().await.unwrap(); + + assert_eq!(expected, res); + } + + #[meilisearch_test] + async fn test_reset_prefix_search(index: Index) { + let expected = PrefixSearchSettings::IndexingTime; + + let task = index + .set_prefix_search(PrefixSearchSettings::Disabled) + .await + .unwrap(); + index.wait_for_task(task, None, None).await.unwrap(); + + let reset_task = index.reset_prefix_search().await.unwrap(); + index.wait_for_task(reset_task, None, None).await.unwrap(); + + let default = index.get_prefix_search().await.unwrap(); + + assert_eq!(expected, default); + } + #[meilisearch_test] async fn test_get_search_cutoff_ms(index: Index) { let expected = None;