mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-07-15 13:58:36 +02:00
Merge pull request #5751 from meilisearch/fix-searchable-attributes-order
Fix: Preserve order of searchable attributes when modified
This commit is contained in:
commit
6f248b78a9
2 changed files with 67 additions and 2 deletions
|
@ -692,3 +692,68 @@ async fn granular_filterable_attributes() {
|
||||||
]
|
]
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn test_searchable_attributes_order() {
|
||||||
|
let server = Server::new_shared();
|
||||||
|
let index = server.unique_index();
|
||||||
|
|
||||||
|
// 1) Create an index with settings "searchableAttributes": ["title", "overview"]
|
||||||
|
let (response, code) = index.create(None).await;
|
||||||
|
assert_eq!(code, 202, "{response}");
|
||||||
|
server.wait_task(response.uid()).await.succeeded();
|
||||||
|
|
||||||
|
let (task, code) = index
|
||||||
|
.update_settings(json!({
|
||||||
|
"searchableAttributes": ["title", "overview"]
|
||||||
|
}))
|
||||||
|
.await;
|
||||||
|
assert_eq!(code, 202, "{task}");
|
||||||
|
server.wait_task(task.uid()).await.succeeded();
|
||||||
|
|
||||||
|
// 2) Add documents in the index
|
||||||
|
let documents = json!([
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"title": "The Matrix",
|
||||||
|
"overview": "A computer hacker learns from mysterious rebels about the true nature of his reality."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"title": "Inception",
|
||||||
|
"overview": "A thief who steals corporate secrets through dream-sharing technology."
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
let (response, code) = index.add_documents(documents, None).await;
|
||||||
|
assert_eq!(code, 202, "{response}");
|
||||||
|
server.wait_task(response.uid()).await.succeeded();
|
||||||
|
|
||||||
|
// 3) Modify the settings "searchableAttributes": ["overview", "title"] (overview is put first)
|
||||||
|
let (task, code) = index
|
||||||
|
.update_settings(json!({
|
||||||
|
"searchableAttributes": ["overview", "title"]
|
||||||
|
}))
|
||||||
|
.await;
|
||||||
|
assert_eq!(code, 202, "{task}");
|
||||||
|
server.wait_task(task.uid()).await.succeeded();
|
||||||
|
|
||||||
|
// 4) Check if it has been applied
|
||||||
|
let (response, code) = index.settings().await;
|
||||||
|
assert_eq!(code, 200, "{response}");
|
||||||
|
assert_eq!(response["searchableAttributes"], json!(["overview", "title"]));
|
||||||
|
|
||||||
|
// 5) Re-modify the settings "searchableAttributes": ["title", "overview"] (title is put first)
|
||||||
|
let (task, code) = index
|
||||||
|
.update_settings(json!({
|
||||||
|
"searchableAttributes": ["title", "overview"]
|
||||||
|
}))
|
||||||
|
.await;
|
||||||
|
assert_eq!(code, 202, "{task}");
|
||||||
|
server.wait_task(task.uid()).await.succeeded();
|
||||||
|
|
||||||
|
// 6) Check if it has been applied
|
||||||
|
let (response, code) = index.settings().await;
|
||||||
|
assert_eq!(code, 200, "{response}");
|
||||||
|
assert_eq!(response["searchableAttributes"], json!(["title", "overview"]));
|
||||||
|
}
|
||||||
|
|
|
@ -554,10 +554,10 @@ impl<'a, 't, 'i> Settings<'a, 't, 'i> {
|
||||||
match self.searchable_fields {
|
match self.searchable_fields {
|
||||||
Setting::Set(ref fields) => {
|
Setting::Set(ref fields) => {
|
||||||
// Check to see if the searchable fields changed before doing anything else
|
// Check to see if the searchable fields changed before doing anything else
|
||||||
let old_fields = self.index.searchable_fields(self.wtxn)?;
|
let old_fields = self.index.user_defined_searchable_fields(self.wtxn)?;
|
||||||
let did_change = {
|
let did_change = {
|
||||||
let new_fields = fields.iter().map(String::as_str).collect::<Vec<_>>();
|
let new_fields = fields.iter().map(String::as_str).collect::<Vec<_>>();
|
||||||
new_fields != old_fields
|
old_fields.is_none_or(|old| new_fields != old)
|
||||||
};
|
};
|
||||||
if !did_change {
|
if !did_change {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue