mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-07-27 08:41:00 +00:00
Add tests
This commit is contained in:
@ -731,3 +731,165 @@ async fn test_filterable_attributes_priority() {
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn test_vector_filter() {
|
||||||
|
let index = crate::vector::shared_index_for_fragments().await;
|
||||||
|
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [
|
||||||
|
{
|
||||||
|
"id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 4
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors.other EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 0
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
|
||||||
|
// This one is counterintuitive, but it is the same as the previous one.
|
||||||
|
// It's because userProvided is interpreted as an embedder name
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors.userProvided EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 0
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors.rest EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [
|
||||||
|
{
|
||||||
|
"id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 4
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors.rest.userProvided EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [
|
||||||
|
{
|
||||||
|
"id": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 1
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors.rest.fragments.withBreed EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [
|
||||||
|
{
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 2
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
|
||||||
|
let (value, _code) = index.search_post(json!({
|
||||||
|
"filter": "_vectors.rest.fragments.basic EXISTS",
|
||||||
|
"attributesToRetrieve": ["id"]
|
||||||
|
})).await;
|
||||||
|
snapshot!(value, @r#"
|
||||||
|
{
|
||||||
|
"hits": [
|
||||||
|
{
|
||||||
|
"id": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"query": "",
|
||||||
|
"processingTimeMs": "[duration]",
|
||||||
|
"limit": 20,
|
||||||
|
"offset": 0,
|
||||||
|
"estimatedTotalHits": 4
|
||||||
|
}
|
||||||
|
"#);
|
||||||
|
}
|
||||||
|
@ -10,7 +10,7 @@ use crate::common::{Owned, Shared};
|
|||||||
use crate::json;
|
use crate::json;
|
||||||
use crate::vector::{GetAllDocumentsOptions, Server};
|
use crate::vector::{GetAllDocumentsOptions, Server};
|
||||||
|
|
||||||
async fn shared_index_for_fragments() -> Index<'static, Shared> {
|
pub async fn shared_index_for_fragments() -> Index<'static, Shared> {
|
||||||
static INDEX: OnceCell<(Server<Shared>, String)> = OnceCell::const_new();
|
static INDEX: OnceCell<(Server<Shared>, String)> = OnceCell::const_new();
|
||||||
let (server, uid) = INDEX
|
let (server, uid) = INDEX
|
||||||
.get_or_init(|| async {
|
.get_or_init(|| async {
|
||||||
|
@ -14,6 +14,7 @@ use meilisearch::option::MaxThreads;
|
|||||||
use crate::common::index::Index;
|
use crate::common::index::Index;
|
||||||
use crate::common::{default_settings, GetAllDocumentsOptions, Server};
|
use crate::common::{default_settings, GetAllDocumentsOptions, Server};
|
||||||
use crate::json;
|
use crate::json;
|
||||||
|
pub use fragments::shared_index_for_fragments;
|
||||||
|
|
||||||
async fn get_server_vector() -> Server {
|
async fn get_server_vector() -> Server {
|
||||||
Server::new().await
|
Server::new().await
|
||||||
|
Reference in New Issue
Block a user