mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-06-18 20:57:35 +02:00
Extract shared indices for movies and batman documents
Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
This commit is contained in:
parent
646e44ddf9
commit
e8774ad079
@ -1,16 +1,80 @@
|
|||||||
use meili_snap::{json_string, snapshot};
|
use meili_snap::{json_string, snapshot};
|
||||||
|
use tokio::sync::OnceCell;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use super::{DOCUMENTS, FRUITS_DOCUMENTS, NESTED_DOCUMENTS};
|
use super::{DOCUMENTS, FRUITS_DOCUMENTS, NESTED_DOCUMENTS};
|
||||||
|
use crate::common::index::Index;
|
||||||
use crate::common::{
|
use crate::common::{
|
||||||
shared_index_with_documents, shared_index_with_nested_documents,
|
shared_index_with_documents, shared_index_with_nested_documents,
|
||||||
shared_index_with_score_documents, Server,
|
shared_index_with_score_documents, Server, Shared,
|
||||||
};
|
};
|
||||||
use crate::json;
|
use crate::json;
|
||||||
use crate::search::{SCORE_DOCUMENTS, VECTOR_DOCUMENTS};
|
use crate::search::{SCORE_DOCUMENTS, VECTOR_DOCUMENTS};
|
||||||
|
|
||||||
mod proxy;
|
mod proxy;
|
||||||
|
|
||||||
|
pub async fn shared_movies_index() -> &'static Index<'static, Shared> {
|
||||||
|
static INDEX: OnceCell<Index<'static, Shared>> = OnceCell::const_new();
|
||||||
|
INDEX
|
||||||
|
.get_or_init(|| async {
|
||||||
|
let server = Server::new_shared();
|
||||||
|
let movies_index = server.unique_index_with_prefix("movies");
|
||||||
|
|
||||||
|
let documents = DOCUMENTS.clone();
|
||||||
|
let (response, _code) = movies_index.add_documents(documents, None).await;
|
||||||
|
movies_index.wait_task(response.uid()).await.succeeded();
|
||||||
|
|
||||||
|
let (value, _) = movies_index
|
||||||
|
.update_settings(json!({
|
||||||
|
"sortableAttributes": ["title"],
|
||||||
|
"filterableAttributes": ["title", "color"],
|
||||||
|
"rankingRules": [
|
||||||
|
"sort",
|
||||||
|
"words",
|
||||||
|
"typo",
|
||||||
|
"proximity",
|
||||||
|
"attribute",
|
||||||
|
"exactness"
|
||||||
|
]
|
||||||
|
}))
|
||||||
|
.await;
|
||||||
|
movies_index.wait_task(value.uid()).await.succeeded();
|
||||||
|
movies_index.to_shared()
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn shared_batman_index() -> &'static Index<'static, Shared> {
|
||||||
|
static INDEX: OnceCell<Index<'static, Shared>> = OnceCell::const_new();
|
||||||
|
INDEX
|
||||||
|
.get_or_init(|| async {
|
||||||
|
let server = Server::new_shared();
|
||||||
|
let batman_index = server.unique_index_with_prefix("batman");
|
||||||
|
|
||||||
|
let documents = SCORE_DOCUMENTS.clone();
|
||||||
|
let (response, _code) = batman_index.add_documents(documents, None).await;
|
||||||
|
batman_index.wait_task(response.uid()).await.succeeded();
|
||||||
|
|
||||||
|
let (value, _) = batman_index
|
||||||
|
.update_settings(json!({
|
||||||
|
"sortableAttributes": ["id", "title"],
|
||||||
|
"filterableAttributes": ["title"],
|
||||||
|
"rankingRules": [
|
||||||
|
"sort",
|
||||||
|
"words",
|
||||||
|
"typo",
|
||||||
|
"proximity",
|
||||||
|
"attribute",
|
||||||
|
"exactness"
|
||||||
|
]
|
||||||
|
}))
|
||||||
|
.await;
|
||||||
|
batman_index.wait_task(value.uid()).await.succeeded();
|
||||||
|
batman_index.to_shared()
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn search_empty_list() {
|
async fn search_empty_list() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
@ -1633,47 +1697,8 @@ async fn federation_sort_same_indexes_different_criterion_opposite_direction() {
|
|||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn federation_sort_different_indexes_same_criterion_same_direction() {
|
async fn federation_sort_different_indexes_same_criterion_same_direction() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let movies_index = shared_movies_index().await;
|
||||||
|
let batman_index = shared_batman_index().await;
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_index = server.unique_index_with_prefix("batman");
|
|
||||||
|
|
||||||
let documents = SCORE_DOCUMENTS.clone();
|
|
||||||
let (value, _) = batman_index.add_documents(documents, None).await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = batman_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
// return titles ordered across indexes
|
// return titles ordered across indexes
|
||||||
let (response, code) = server
|
let (response, code) = server
|
||||||
@ -1903,26 +1928,7 @@ async fn federation_sort_different_indexes_same_criterion_same_direction() {
|
|||||||
async fn federation_sort_different_ranking_rules() {
|
async fn federation_sort_different_ranking_rules() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
|
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let movies_index = shared_movies_index().await;
|
||||||
|
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_index = shared_index_with_score_documents().await;
|
let batman_index = shared_index_with_score_documents().await;
|
||||||
|
|
||||||
@ -2087,48 +2093,8 @@ async fn federation_sort_different_ranking_rules() {
|
|||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn federation_sort_different_indexes_same_criterion_opposite_direction() {
|
async fn federation_sort_different_indexes_same_criterion_opposite_direction() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
|
let movies_index = shared_movies_index().await;
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let batman_index = shared_batman_index().await;
|
||||||
|
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_index = server.unique_index_with_prefix("batman");
|
|
||||||
|
|
||||||
let documents = SCORE_DOCUMENTS.clone();
|
|
||||||
let (value, _) = batman_index.add_documents(documents, None).await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = batman_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
// all results from query 0
|
// all results from query 0
|
||||||
let (response, code) = server
|
let (response, code) = server
|
||||||
@ -2169,48 +2135,8 @@ async fn federation_sort_different_indexes_same_criterion_opposite_direction() {
|
|||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn federation_sort_different_indexes_different_criterion_same_direction() {
|
async fn federation_sort_different_indexes_different_criterion_same_direction() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
|
let movies_index = shared_movies_index().await;
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let batman_index = shared_batman_index().await;
|
||||||
|
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_index = server.unique_index_with_prefix("batman");
|
|
||||||
|
|
||||||
let documents = SCORE_DOCUMENTS.clone();
|
|
||||||
let (value, _) = batman_index.add_documents(documents, None).await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = batman_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["id"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
// return titles ordered across indexes
|
// return titles ordered across indexes
|
||||||
let (response, code) = server
|
let (response, code) = server
|
||||||
@ -2439,48 +2365,8 @@ async fn federation_sort_different_indexes_different_criterion_same_direction()
|
|||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn federation_sort_different_indexes_different_criterion_opposite_direction() {
|
async fn federation_sort_different_indexes_different_criterion_opposite_direction() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
|
let movies_index = shared_movies_index().await;
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let batman_index = shared_batman_index().await;
|
||||||
|
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_index = server.unique_index_with_prefix("batman");
|
|
||||||
|
|
||||||
let documents = SCORE_DOCUMENTS.clone();
|
|
||||||
let (value, _) = batman_index.add_documents(documents, None).await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = batman_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["id"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
// all results from query 0 first
|
// all results from query 0 first
|
||||||
let (response, code) = server
|
let (response, code) = server
|
||||||
@ -4265,50 +4151,8 @@ async fn federation_vector_two_indexes() {
|
|||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn federation_facets_different_indexes_same_facet() {
|
async fn federation_facets_different_indexes_same_facet() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
|
let movies_index = shared_movies_index().await;
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let batman_index = shared_batman_index().await;
|
||||||
|
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"filterableAttributes": ["title", "color"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_index = server.unique_index_with_prefix("batman");
|
|
||||||
|
|
||||||
let documents = SCORE_DOCUMENTS.clone();
|
|
||||||
let (value, _) = batman_index.add_documents(documents, None).await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = batman_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"filterableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let batman_2_index = server.unique_index_with_prefix("batman_2");
|
let batman_2_index = server.unique_index_with_prefix("batman_2");
|
||||||
|
|
||||||
@ -5134,27 +4978,7 @@ async fn federation_facets_same_indexes() {
|
|||||||
async fn federation_inconsistent_merge_order() {
|
async fn federation_inconsistent_merge_order() {
|
||||||
let server = Server::new_shared();
|
let server = Server::new_shared();
|
||||||
|
|
||||||
let movies_index = server.unique_index_with_prefix("movies");
|
let movies_index = shared_movies_index().await;
|
||||||
|
|
||||||
let documents = DOCUMENTS.clone();
|
|
||||||
let (value, _) = movies_index.add_documents(documents, None).await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = movies_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"filterableAttributes": ["title", "color"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
movies_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let movies2_index = server.unique_index_with_prefix("movies_2");
|
let movies2_index = server.unique_index_with_prefix("movies_2");
|
||||||
|
|
||||||
@ -5181,27 +5005,7 @@ async fn federation_inconsistent_merge_order() {
|
|||||||
.await;
|
.await;
|
||||||
movies2_index.wait_task(value.uid()).await.succeeded();
|
movies2_index.wait_task(value.uid()).await.succeeded();
|
||||||
|
|
||||||
let batman_index = server.unique_index_with_prefix("batman");
|
let batman_index = shared_batman_index().await;
|
||||||
|
|
||||||
let documents = SCORE_DOCUMENTS.clone();
|
|
||||||
let (value, _) = batman_index.add_documents(documents, None).await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
let (value, _) = batman_index
|
|
||||||
.update_settings(json!({
|
|
||||||
"sortableAttributes": ["title"],
|
|
||||||
"filterableAttributes": ["title"],
|
|
||||||
"rankingRules": [
|
|
||||||
"sort",
|
|
||||||
"words",
|
|
||||||
"typo",
|
|
||||||
"proximity",
|
|
||||||
"attribute",
|
|
||||||
"exactness"
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
.await;
|
|
||||||
batman_index.wait_task(value.uid()).await.succeeded();
|
|
||||||
|
|
||||||
// without merging, it works
|
// without merging, it works
|
||||||
let (response, code) = server
|
let (response, code) = server
|
||||||
|
Loading…
x
Reference in New Issue
Block a user