Skip to content

Commit 1076241

Browse files
Added the same settings operations found in meilisearch/meilisearch-python#924
1 parent e21d8a9 commit 1076241

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

src/settings.rs

+116
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,49 @@ impl Index {
820820
.await
821821
}
822822

823+
/// Get [embedders](https://www.meilisearch.com/docs/learn/experimental/vector_search) of the [Index].
824+
///
825+
/// ```
826+
/// # use std::collections::HashMap;
827+
/// # use std::string::String;
828+
/// use meilisearch_sdk::{client::*, CustomEmbedderSettings, Embedder, ExperimentalFeatures, indexes::*, Settings};
829+
/// #
830+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
831+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
832+
/// #
833+
/// # futures::executor::block_on(async move {
834+
/// let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY));
835+
/// # client.create_index("get_embedders", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
836+
/// let index = client.index("get_embedders");
837+
///
838+
/// # let mut features = ExperimentalFeatures::new(&client);
839+
/// # features.set_vector_store(true);
840+
/// # let res = features.update().await.unwrap();
841+
/// #
842+
/// # let t=index.set_settings(&Settings{
843+
/// # embedders:Some(HashMap::from([(String::from("default"),Embedder::UserProvided(CustomEmbedderSettings{dimensions:1}))])),
844+
/// # ..Settings::default()
845+
/// # }).await.unwrap();
846+
/// # t.wait_for_completion(&client, None, None).await.unwrap();
847+
/// let embedders = index.get_embedders().await.unwrap();
848+
/// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
849+
/// # });
850+
/// ```
851+
#[cfg(feature = "experimental-vector-search")]
852+
pub async fn get_embedders(&self) -> Result<HashMap<String, Embedder>, Error> {
853+
request::<(), (), Option<HashMap<String, Embedder>>>(
854+
&format!(
855+
"{}/indexes/{}/settings/embedders",
856+
self.client.host, self.uid
857+
),
858+
self.client.get_api_key(),
859+
Method::Get { query: () },
860+
200,
861+
)
862+
.await
863+
.map(|r|r.unwrap_or_default())
864+
}
865+
823866
/// Update [settings](../settings/struct.Settings) of the [Index].
824867
///
825868
/// Updates in the settings are partial. This means that any parameters corresponding to a `None` value will be left unchanged.
@@ -1847,6 +1890,39 @@ impl Index {
18471890
)
18481891
.await
18491892
}
1893+
1894+
/// Reset [embedders](https://www.meilisearch.com/docs/learn/experimental/vector_search) of the [Index].
1895+
///
1896+
/// # Example
1897+
///
1898+
/// ```
1899+
/// # use meilisearch_sdk::{client::*, indexes::*, settings::Settings};
1900+
/// #
1901+
/// # let MEILISEARCH_URL = option_env!("MEILISEARCH_URL").unwrap_or("http://localhost:7700");
1902+
/// # let MEILISEARCH_API_KEY = option_env!("MEILISEARCH_API_KEY").unwrap_or("masterKey");
1903+
/// #
1904+
/// # futures::executor::block_on(async move {
1905+
/// # let client = Client::new(MEILISEARCH_URL, Some(MEILISEARCH_API_KEY));
1906+
/// # client.create_index("reset_embedders", None).await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
1907+
/// let mut index = client.index("reset_embedders");
1908+
///
1909+
/// let task = index.reset_embedders().await.unwrap();
1910+
/// # index.delete().await.unwrap().wait_for_completion(&client, None, None).await.unwrap();
1911+
/// # });
1912+
/// ```
1913+
#[cfg(feature = "experimental-vector-search")]
1914+
pub async fn reset_embedders(&self) -> Result<TaskInfo, Error> {
1915+
request::<(), (), TaskInfo>(
1916+
&format!(
1917+
"{}/indexes/{}/settings/embedders",
1918+
self.client.host, self.uid
1919+
),
1920+
self.client.get_api_key(),
1921+
Method::Delete { query: () },
1922+
202,
1923+
)
1924+
.await
1925+
}
18501926
}
18511927

18521928
#[cfg(test)]
@@ -1908,6 +1984,24 @@ mod tests {
19081984
assert_eq!(faceting, res);
19091985
}
19101986

1987+
1988+
#[cfg(feature = "experimental-vector-search")]
1989+
#[meilisearch_test]
1990+
async fn test_reset_embedders(client: Client, index: Index) {
1991+
let features = crate::ExperimentalFeatures::new(&client)
1992+
.set_vector_store(true)
1993+
.update()
1994+
.await
1995+
.expect("could not enable the vector store");
1996+
assert_eq!(features.vector_store, true);
1997+
let task_info = index.reset_embedders().await.unwrap();
1998+
client.wait_for_task(task_info, None, None).await.unwrap();
1999+
2000+
let res = index.get_embedders().await.unwrap();
2001+
2002+
assert_eq!(HashMap::new(), res);
2003+
}
2004+
19112005
#[meilisearch_test]
19122006
async fn test_get_dictionary(index: Index) {
19132007
let dictionary: Vec<String> = vec![];
@@ -2084,6 +2178,28 @@ mod tests {
20842178
assert_eq!(expected, res);
20852179
}
20862180

2181+
#[cfg(feature = "experimental-vector-search")]
2182+
#[meilisearch_test]
2183+
async fn test_set_embedding_settings(client: Client, index: Index) {
2184+
let features = crate::ExperimentalFeatures::new(&client)
2185+
.set_vector_store(true)
2186+
.update()
2187+
.await
2188+
.expect("could not enable the vector store");
2189+
assert_eq!(features.vector_store, true);
2190+
2191+
let custom_embedder =Embedder::UserProvided(CustomEmbedderSettings{dimensions:2});
2192+
let embeddings = HashMap::from([("default".into(),custom_embedder)]);
2193+
let settings = Settings::new().with_embedders(embeddings.clone());
2194+
2195+
let task_info = index.set_settings(&settings).await.unwrap();
2196+
client.wait_for_task(task_info, None, None).await.unwrap();
2197+
2198+
let res = index.get_embedders().await.unwrap();
2199+
2200+
assert_eq!(embeddings, res);
2201+
}
2202+
20872203
#[meilisearch_test]
20882204
async fn test_reset_proximity_precision(index: Index) {
20892205
let expected = "byWord".to_string();

0 commit comments

Comments
 (0)