mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-26 20:15:07 +08:00
532 lines
26 KiB
Rust
532 lines
26 KiB
Rust
use milli::{Search, SearchResult, Criterion};
|
|
use big_s::S;
|
|
|
|
use crate::search::{self, EXTERNAL_DOCUMENTS_IDS};
|
|
|
|
#[test]
|
|
fn none() {
|
|
let criteria = vec![];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, true).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn words() {
|
|
let criteria = vec![Criterion::Words];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, true).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn attribute() {
|
|
let criteria = vec![Criterion::Attribute];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn exactness() {
|
|
let criteria = vec![Criterion::Exactness];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn proximity() {
|
|
let criteria = vec![Criterion::Proximity];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn typo() {
|
|
let criteria = vec![Criterion::Typo];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn asc() {
|
|
let criteria = vec![Criterion::Asc(S("asc_desc_rank"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn desc() {
|
|
let criteria = vec![Criterion::Desc(S("asc_desc_rank"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn none_0_typo() {
|
|
let criteria = vec![];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.authorize_typos(false);
|
|
search.optional_words(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn attribute_0_typo() {
|
|
let criteria = vec![Criterion::Attribute];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn exactness_0_typo() {
|
|
let criteria = vec![Criterion::Exactness];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn proximity_0_typo() {
|
|
let criteria = vec![Criterion::Proximity];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn typo_0_typo() {
|
|
let criteria = vec![Criterion::Typo];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn asc_0_typo() {
|
|
let criteria = vec![Criterion::Asc(S("asc_desc_rank"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn desc_0_typo() {
|
|
let criteria = vec![Criterion::Desc(S("asc_desc_rank"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn test_desc_on_unexisting_field_should_return_all_1() {
|
|
let criteria = vec![Criterion::Desc(S("unexisting_field"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let criteria = vec![];
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn test_asc_on_unexisting_field_should_return_all_1() {
|
|
let criteria = vec![Criterion::Asc(S("unexisting_field"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(false);
|
|
search.authorize_typos(false);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let criteria = vec![];
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, false, false).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn test_desc_on_unexisting_field_should_return_all_2() {
|
|
let criteria = vec![Criterion::Desc(S("unexisting_field"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let criteria = vec![];
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, true).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn test_asc_on_unexisting_field_should_return_all_2() {
|
|
let criteria = vec![Criterion::Asc(S("unexisting_field"))];
|
|
let index = search::setup_search_index_with_criteria(&criteria);
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let criteria = vec![];
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, true).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
|
|
#[test]
|
|
fn criteria_mixup() {
|
|
use Criterion::*;
|
|
let index = search::setup_search_index_with_criteria(&vec![Words, Attribute, Desc(S("asc_desc_rank")), Exactness, Proximity, Typo]);
|
|
|
|
|
|
let criteria_mix = {
|
|
let desc = || Desc(S("asc_desc_rank"));
|
|
// all possible criteria order
|
|
vec![
|
|
vec![Words, Attribute, desc(), Exactness, Proximity, Typo],
|
|
vec![Words, Attribute, desc(), Exactness, Typo, Proximity],
|
|
vec![Words, Attribute, desc(), Proximity, Exactness, Typo],
|
|
vec![Words, Attribute, desc(), Proximity, Typo, Exactness],
|
|
vec![Words, Attribute, desc(), Typo, Exactness, Proximity],
|
|
vec![Words, Attribute, desc(), Typo, Proximity, Exactness],
|
|
vec![Words, Attribute, Exactness, desc(), Proximity, Typo],
|
|
vec![Words, Attribute, Exactness, desc(), Typo, Proximity],
|
|
vec![Words, Attribute, Exactness, Proximity, desc(), Typo],
|
|
vec![Words, Attribute, Exactness, Proximity, Typo, desc()],
|
|
vec![Words, Attribute, Exactness, Typo, desc(), Proximity],
|
|
vec![Words, Attribute, Exactness, Typo, Proximity, desc()],
|
|
vec![Words, Attribute, Proximity, desc(), Exactness, Typo],
|
|
vec![Words, Attribute, Proximity, desc(), Typo, Exactness],
|
|
vec![Words, Attribute, Proximity, Exactness, desc(), Typo],
|
|
vec![Words, Attribute, Proximity, Exactness, Typo, desc()],
|
|
vec![Words, Attribute, Proximity, Typo, desc(), Exactness],
|
|
vec![Words, Attribute, Proximity, Typo, Exactness, desc()],
|
|
vec![Words, Attribute, Typo, desc(), Exactness, Proximity],
|
|
vec![Words, Attribute, Typo, desc(), Proximity, Exactness],
|
|
vec![Words, Attribute, Typo, Exactness, desc(), Proximity],
|
|
vec![Words, Attribute, Typo, Exactness, Proximity, desc()],
|
|
vec![Words, Attribute, Typo, Proximity, desc(), Exactness],
|
|
vec![Words, Attribute, Typo, Proximity, Exactness, desc()],
|
|
vec![Words, desc(), Attribute, Exactness, Proximity, Typo],
|
|
vec![Words, desc(), Attribute, Exactness, Typo, Proximity],
|
|
vec![Words, desc(), Attribute, Proximity, Exactness, Typo],
|
|
vec![Words, desc(), Attribute, Proximity, Typo, Exactness],
|
|
vec![Words, desc(), Attribute, Typo, Exactness, Proximity],
|
|
vec![Words, desc(), Attribute, Typo, Proximity, Exactness],
|
|
vec![Words, desc(), Exactness, Attribute, Proximity, Typo],
|
|
vec![Words, desc(), Exactness, Attribute, Typo, Proximity],
|
|
vec![Words, desc(), Exactness, Proximity, Attribute, Typo],
|
|
vec![Words, desc(), Exactness, Proximity, Typo, Attribute],
|
|
vec![Words, desc(), Exactness, Typo, Attribute, Proximity],
|
|
vec![Words, desc(), Exactness, Typo, Proximity, Attribute],
|
|
vec![Words, desc(), Proximity, Attribute, Exactness, Typo],
|
|
vec![Words, desc(), Proximity, Attribute, Typo, Exactness],
|
|
vec![Words, desc(), Proximity, Exactness, Attribute, Typo],
|
|
vec![Words, desc(), Proximity, Exactness, Typo, Attribute],
|
|
vec![Words, desc(), Proximity, Typo, Attribute, Exactness],
|
|
vec![Words, desc(), Proximity, Typo, Exactness, Attribute],
|
|
vec![Words, desc(), Typo, Attribute, Exactness, Proximity],
|
|
vec![Words, desc(), Typo, Attribute, Proximity, Exactness],
|
|
vec![Words, desc(), Typo, Exactness, Attribute, Proximity],
|
|
vec![Words, desc(), Typo, Exactness, Proximity, Attribute],
|
|
vec![Words, desc(), Typo, Proximity, Attribute, Exactness],
|
|
vec![Words, desc(), Typo, Proximity, Exactness, Attribute],
|
|
vec![Words, Exactness, Attribute, desc(), Proximity, Typo],
|
|
vec![Words, Exactness, Attribute, desc(), Typo, Proximity],
|
|
vec![Words, Exactness, Attribute, Proximity, desc(), Typo],
|
|
vec![Words, Exactness, Attribute, Proximity, Typo, desc()],
|
|
vec![Words, Exactness, Attribute, Typo, desc(), Proximity],
|
|
vec![Words, Exactness, Attribute, Typo, Proximity, desc()],
|
|
vec![Words, Exactness, desc(), Attribute, Proximity, Typo],
|
|
vec![Words, Exactness, desc(), Attribute, Typo, Proximity],
|
|
vec![Words, Exactness, desc(), Proximity, Attribute, Typo],
|
|
vec![Words, Exactness, desc(), Proximity, Typo, Attribute],
|
|
vec![Words, Exactness, desc(), Typo, Attribute, Proximity],
|
|
vec![Words, Exactness, desc(), Typo, Proximity, Attribute],
|
|
vec![Words, Exactness, Proximity, Attribute, desc(), Typo],
|
|
vec![Words, Exactness, Proximity, Attribute, Typo, desc()],
|
|
vec![Words, Exactness, Proximity, desc(), Attribute, Typo],
|
|
vec![Words, Exactness, Proximity, desc(), Typo, Attribute],
|
|
vec![Words, Exactness, Proximity, Typo, Attribute, desc()],
|
|
vec![Words, Exactness, Proximity, Typo, desc(), Attribute],
|
|
vec![Words, Exactness, Typo, Attribute, desc(), Proximity],
|
|
vec![Words, Exactness, Typo, Attribute, Proximity, desc()],
|
|
vec![Words, Exactness, Typo, desc(), Attribute, Proximity],
|
|
vec![Words, Exactness, Typo, desc(), Proximity, Attribute],
|
|
vec![Words, Exactness, Typo, Proximity, Attribute, desc()],
|
|
vec![Words, Exactness, Typo, Proximity, desc(), Attribute],
|
|
vec![Words, Proximity, Attribute, desc(), Exactness, Typo],
|
|
vec![Words, Proximity, Attribute, desc(), Typo, Exactness],
|
|
vec![Words, Proximity, Attribute, Exactness, desc(), Typo],
|
|
vec![Words, Proximity, Attribute, Exactness, Typo, desc()],
|
|
vec![Words, Proximity, Attribute, Typo, desc(), Exactness],
|
|
vec![Words, Proximity, Attribute, Typo, Exactness, desc()],
|
|
vec![Words, Proximity, desc(), Attribute, Exactness, Typo],
|
|
vec![Words, Proximity, desc(), Attribute, Typo, Exactness],
|
|
vec![Words, Proximity, desc(), Exactness, Attribute, Typo],
|
|
vec![Words, Proximity, desc(), Exactness, Typo, Attribute],
|
|
vec![Words, Proximity, desc(), Typo, Attribute, Exactness],
|
|
vec![Words, Proximity, desc(), Typo, Exactness, Attribute],
|
|
vec![Words, Proximity, Exactness, Attribute, desc(), Typo],
|
|
vec![Words, Proximity, Exactness, Attribute, Typo, desc()],
|
|
vec![Words, Proximity, Exactness, desc(), Attribute, Typo],
|
|
vec![Words, Proximity, Exactness, desc(), Typo, Attribute],
|
|
vec![Words, Proximity, Exactness, Typo, Attribute, desc()],
|
|
vec![Words, Proximity, Exactness, Typo, desc(), Attribute],
|
|
vec![Words, Proximity, Typo, Attribute, desc(), Exactness],
|
|
vec![Words, Proximity, Typo, Attribute, Exactness, desc()],
|
|
vec![Words, Proximity, Typo, desc(), Attribute, Exactness],
|
|
vec![Words, Proximity, Typo, desc(), Exactness, Attribute],
|
|
vec![Words, Proximity, Typo, Exactness, Attribute, desc()],
|
|
vec![Words, Proximity, Typo, Exactness, desc(), Attribute],
|
|
vec![Words, Typo, Attribute, desc(), Exactness, Proximity],
|
|
vec![Words, Typo, Attribute, desc(), Proximity, Exactness],
|
|
vec![Words, Typo, Attribute, Exactness, desc(), Proximity],
|
|
vec![Words, Typo, Attribute, Exactness, Proximity, desc()],
|
|
vec![Words, Typo, Attribute, Proximity, desc(), Exactness],
|
|
vec![Words, Typo, Attribute, Proximity, Exactness, desc()],
|
|
vec![Words, Typo, desc(), Attribute, Proximity, Exactness],
|
|
vec![Words, Typo, desc(), Exactness, Attribute, Proximity],
|
|
vec![Words, Typo, desc(), Exactness, Attribute, Proximity],
|
|
vec![Words, Typo, desc(), Exactness, Proximity, Attribute],
|
|
vec![Words, Typo, desc(), Proximity, Attribute, Exactness],
|
|
vec![Words, Typo, desc(), Proximity, Exactness, Attribute],
|
|
vec![Words, Typo, Exactness, Attribute, desc(), Proximity],
|
|
vec![Words, Typo, Exactness, Attribute, Proximity, desc()],
|
|
vec![Words, Typo, Exactness, desc(), Attribute, Proximity],
|
|
vec![Words, Typo, Exactness, desc(), Proximity, Attribute],
|
|
vec![Words, Typo, Exactness, Proximity, Attribute, desc()],
|
|
vec![Words, Typo, Exactness, Proximity, desc(), Attribute],
|
|
vec![Words, Typo, Proximity, Attribute, desc(), Exactness],
|
|
vec![Words, Typo, Proximity, Attribute, Exactness, desc()],
|
|
vec![Words, Typo, Proximity, desc(), Attribute, Exactness],
|
|
vec![Words, Typo, Proximity, desc(), Exactness, Attribute],
|
|
vec![Words, Typo, Proximity, Exactness, Attribute, desc()],
|
|
vec![Words, Typo, Proximity, Exactness, desc(), Attribute],
|
|
]
|
|
};
|
|
|
|
for criteria in criteria_mix {
|
|
eprintln!("Testing with criteria order: {:?}", &criteria);
|
|
//update criteria
|
|
let mut wtxn = index.write_txn().unwrap();
|
|
index.put_criteria(&mut wtxn, &criteria).unwrap();
|
|
wtxn.commit().unwrap();
|
|
|
|
let mut rtxn = index.read_txn().unwrap();
|
|
|
|
let mut search = Search::new(&mut rtxn, &index);
|
|
search.query(search::TEST_QUERY);
|
|
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
|
search.optional_words(true);
|
|
search.authorize_typos(true);
|
|
|
|
let SearchResult { matching_words: _matching_words, candidates: _candidates, documents_ids } = search.execute().unwrap();
|
|
|
|
let expected_external_ids: Vec<_> = search::expected_order(&criteria, true, true).into_iter().map(|d| d.id).collect();
|
|
let documents_ids = search::internal_to_external_ids(&index, &documents_ids);
|
|
|
|
assert_eq!(documents_ids, expected_external_ids);
|
|
}
|
|
}
|