mirror of
https://github.com/meilisearch/meilisearch.git
synced 2025-07-26 16:21:07 +00:00
Make all search tests pass, fix distinctAttribute bug
This commit is contained in:
@ -1,17 +1,384 @@
|
||||
{"id":"A","word_rank":0,"typo_rank":1,"proximity_rank":15,"attribute_rank":505,"exact_rank":5,"asc_desc_rank":0,"sort_by_rank":0,"geo_rank":43,"title":"hell o","description":"hell o is the fourteenth episode of the american television series glee performing songs with this word","tag":"etiopia","_geo": { "lat": 50.62984446145472, "lng": 3.085712705162039 },"":"", "opt1": [null], "tag_in": 1}
|
||||
{"id":"B","word_rank":2,"typo_rank":0,"proximity_rank":0,"attribute_rank":0,"exact_rank":4,"asc_desc_rank":1,"sort_by_rank":2,"geo_rank":191,"title":"hello","description":"hello is a song recorded by english singer songwriter adele","tag":"fehérorosz","_geo": { "lat": 50.63047567664291, "lng": 3.088852230809636 },"":"", "opt1": [], "tag_in": 2}
|
||||
{"id":"C","word_rank":0,"typo_rank":1,"proximity_rank":8,"attribute_rank":336,"exact_rank":4,"asc_desc_rank":2,"sort_by_rank":0,"geo_rank":283,"title":"hell on earth","description":"hell on earth is the third studio album by american hip hop duo mobb deep","tag":"etiopia","_geo": { "lat": 50.6321800003937, "lng": 3.088331882262139 },"":"", "opt1": null, "tag_in": 3}
|
||||
{"id":"D","word_rank":0,"typo_rank":1,"proximity_rank":10,"attribute_rank":757,"exact_rank":4,"asc_desc_rank":3,"sort_by_rank":2,"geo_rank":1381,"title":"hell on wheels tv series","description":"the construction of the first transcontinental railroad across the united states in the world","tag":"fehérorosz","_geo": { "lat": 50.63728851135729, "lng": 3.0703951595971626 },"":"", "opt1": 4, "tag_in": "four"}
|
||||
{"id":"E","word_rank":2,"typo_rank":0,"proximity_rank":0,"attribute_rank":0,"exact_rank":4,"asc_desc_rank":4,"sort_by_rank":1,"geo_rank":1979,"title":"hello kitty","description":"also known by her full name kitty white is a fictional character produced by the japanese company sanrio","tag":"észak-korea","_geo": { "lat": 50.64264610511925, "lng": 3.0665099941857634 },"":"", "opt1": "E", "tag_in": "five"}
|
||||
{"id":"F","word_rank":2,"typo_rank":1,"proximity_rank":0,"attribute_rank":1017,"exact_rank":5,"asc_desc_rank":5,"sort_by_rank":0,"geo_rank":65022,"title":"laptop orchestra","description":"a laptop orchestra lork or lo is a chamber music ensemble consisting primarily of laptops like helo huddersfield experimental laptop orchestra","tag":"etiopia","_geo": { "lat": 51.05028653642387, "lng": 3.7301072771642096 },"":"", "opt1": ["F"], "tag_in": null}
|
||||
{"id":"G","word_rank":1,"typo_rank":0,"proximity_rank":0,"attribute_rank":0,"exact_rank":3,"asc_desc_rank":5,"sort_by_rank":2,"geo_rank":34692,"title":"hello world film","description":"hello world is a 2019 japanese animated sci fi romantic drama film directed by tomohiko ito and produced by graphinica","tag":"fehérorosz","_geo": { "lat": 50.78776041427129, "lng": 2.661201766290338 },"":"", "opt1": [7]}
|
||||
{"id":"H","word_rank":1,"typo_rank":0,"proximity_rank":1,"attribute_rank":0,"exact_rank":3,"asc_desc_rank":4,"sort_by_rank":1,"geo_rank":202182,"title":"world hello day","description":"holiday observed on november 21 to express that conflicts should be resolved through communication rather than the use of force","tag":"észak-korea","_geo": { "lat": 48.875617484531965, "lng": 2.346747821504194 },"":"", "opt1": ["H", 8], "tag_in": 8}
|
||||
{"id":"I","word_rank":0,"typo_rank":0,"proximity_rank":8,"attribute_rank":338,"exact_rank":3,"asc_desc_rank":3,"sort_by_rank":0,"geo_rank":740667,"title":"hello world song","description":"hello world is a song written by tom douglas tony lane and david lee and recorded by american country music group lady antebellum","tag":"etiopia","_geo": { "lat": 43.973998070351065, "lng": 3.4661837318345032 },"":"", "tag_in": "nine"}
|
||||
{"id":"J","word_rank":1,"typo_rank":0,"proximity_rank":1,"attribute_rank":1,"exact_rank":3,"asc_desc_rank":2,"sort_by_rank":1,"geo_rank":739020,"title":"hello cruel world","description":"hello cruel world is an album by new zealand band tall dwarfs","tag":"észak-korea","_geo": { "lat": 43.98920130353838, "lng": 3.480519311627928 },"":"", "opt1": {}, "tag_in": 10}
|
||||
{"id":"K","word_rank":0,"typo_rank":2,"proximity_rank":9,"attribute_rank":670,"exact_rank":5,"asc_desc_rank":1,"sort_by_rank":2,"geo_rank":738830,"title":"hallo creation system","description":"in few word hallo was a construction toy created by the american company mattel to engage girls in construction play","tag":"fehérorosz","_geo": { "lat": 43.99155030238669, "lng": 3.503453528249425 },"":"", "opt1": [{"opt2": 11}] , "tag_in": "eleven"}
|
||||
{"id":"L","word_rank":0,"typo_rank":0,"proximity_rank":2,"attribute_rank":250,"exact_rank":4,"asc_desc_rank":0,"sort_by_rank":0,"geo_rank":737861,"title":"good morning world","description":"good morning world is an american sitcom broadcast on cbs tv during the 1967 1968 season","tag":"etiopia","_geo": { "lat": 44.000507750283695, "lng": 3.5116812040621572 },"":"", "opt1": {"opt2": [12]}, "tag_in": 12}
|
||||
{"id":"M","word_rank":0,"typo_rank":0,"proximity_rank":0,"attribute_rank":0,"exact_rank":0,"asc_desc_rank":0,"sort_by_rank":2,"geo_rank":739203,"title":"hello world america","description":"a perfect match for a perfect engine using the query hello world america","tag":"fehérorosz","_geo": { "lat": 43.99150729038736, "lng": 3.606143957295055 },"":"", "opt1": [13, [{"opt2": null}]]}
|
||||
{"id":"N","word_rank":0,"typo_rank":0,"proximity_rank":0,"attribute_rank":0,"exact_rank":1,"asc_desc_rank":4,"sort_by_rank":1,"geo_rank":9499586,"title":"hello world america unleashed","description":"a very good match for a very good engine using the query hello world america","tag":"észak-korea","_geo": { "lat": 35.511540843367115, "lng": 138.764368875787 },"":"", "opt1": {"a": 1, "opt2": {"opt3": 14}}}
|
||||
{"id":"O","word_rank":0,"typo_rank":0,"proximity_rank":0,"attribute_rank":10,"exact_rank":0,"asc_desc_rank":6,"sort_by_rank":0,"geo_rank":9425163,"title":"a perfect match for a perfect engine using the query hello world america","description":"hello world america","tag":"etiopia","_geo": { "lat": 35.00536702277189, "lng": 135.76118763940391 },"":"", "opt1": [[[[]]]]}
|
||||
{"id":"P","word_rank":0,"typo_rank":0,"proximity_rank":0,"attribute_rank":12,"exact_rank":1,"asc_desc_rank":3,"sort_by_rank":2,"geo_rank":9422437,"title":"a very good match for a very good engine using the query hello world america","description":"hello world america unleashed","tag":"fehérorosz","_geo": { "lat": 35.06462306367058, "lng": 135.8338440354251 },"":"", "opt1.opt2": 16}
|
||||
{"id":"Q","word_rank":1,"typo_rank":0,"proximity_rank":0,"attribute_rank":0,"exact_rank":3,"asc_desc_rank":2,"sort_by_rank":1,"geo_rank":9339230,"title":"hello world","description":"a hello world program generally is a computer program that outputs or displays the message hello world","tag":"észak-korea","_geo": { "lat": 34.39548365683149, "lng": 132.4535960928883 },"":""}
|
||||
{
|
||||
"id": "A",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 2,
|
||||
"proximity_rank": 16,
|
||||
"attribute_rank": 224,
|
||||
"exact_rank": 6,
|
||||
"asc_desc_rank": 0,
|
||||
"sort_by_rank": 0,
|
||||
"geo_rank": 43,
|
||||
"title": "hell o",
|
||||
"description": "hell o is the fourteenth episode of the american television series glee performing songs with this word",
|
||||
"tag": "etiopia",
|
||||
"_geo": {
|
||||
"lat": 50.62984446145472,
|
||||
"lng": 3.085712705162039
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
null
|
||||
],
|
||||
"tag_in": 1
|
||||
}
|
||||
{
|
||||
"id": "B",
|
||||
"word_rank": 2,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 0,
|
||||
"exact_rank": 0,
|
||||
"asc_desc_rank": 1,
|
||||
"sort_by_rank": 2,
|
||||
"geo_rank": 191,
|
||||
"title": "hello",
|
||||
"description": "hello is a song recorded by english singer songwriter adele",
|
||||
"tag": "fehérorosz",
|
||||
"_geo": {
|
||||
"lat": 50.63047567664291,
|
||||
"lng": 3.088852230809636
|
||||
},
|
||||
"": "",
|
||||
"opt1": [],
|
||||
"tag_in": 2
|
||||
}
|
||||
{
|
||||
"id": "C",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 1,
|
||||
"proximity_rank": 10,
|
||||
"attribute_rank": 111,
|
||||
"exact_rank": 6,
|
||||
"asc_desc_rank": 2,
|
||||
"sort_by_rank": 0,
|
||||
"geo_rank": 283,
|
||||
"title": "hell on earth",
|
||||
"description": "hell on earth is the third studio album by american hip hop duo mobb deep",
|
||||
"tag": "etiopia",
|
||||
"_geo": {
|
||||
"lat": 50.6321800003937,
|
||||
"lng": 3.088331882262139
|
||||
},
|
||||
"": "",
|
||||
"opt1": null,
|
||||
"tag_in": 3
|
||||
}
|
||||
{
|
||||
"id": "D",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 1,
|
||||
"proximity_rank": 16,
|
||||
"attribute_rank": 213,
|
||||
"exact_rank": 5,
|
||||
"asc_desc_rank": 3,
|
||||
"sort_by_rank": 2,
|
||||
"geo_rank": 1381,
|
||||
"title": "hell on wheels tv series",
|
||||
"description": "the construction of the first transcontinental railroad across the united states in the world",
|
||||
"tag": "fehérorosz",
|
||||
"_geo": {
|
||||
"lat": 50.63728851135729,
|
||||
"lng": 3.0703951595971626
|
||||
},
|
||||
"": "",
|
||||
"opt1": 4,
|
||||
"tag_in": "four"
|
||||
}
|
||||
{
|
||||
"id": "E",
|
||||
"word_rank": 2,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 0,
|
||||
"exact_rank": 1,
|
||||
"asc_desc_rank": 4,
|
||||
"sort_by_rank": 1,
|
||||
"geo_rank": 1979,
|
||||
"title": "hello kitty",
|
||||
"description": "also known by her full name kitty white is a fictional character produced by the japanese company sanrio",
|
||||
"tag": "észak-korea",
|
||||
"_geo": {
|
||||
"lat": 50.64264610511925,
|
||||
"lng": 3.0665099941857634
|
||||
},
|
||||
"": "",
|
||||
"opt1": "E",
|
||||
"tag_in": "five"
|
||||
}
|
||||
{
|
||||
"id": "F",
|
||||
"word_rank": 2,
|
||||
"typo_rank": 1,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 116,
|
||||
"exact_rank": 5,
|
||||
"asc_desc_rank": 5,
|
||||
"sort_by_rank": 0,
|
||||
"geo_rank": 65022,
|
||||
"title": "laptop orchestra",
|
||||
"description": "a laptop orchestra lork or lo is a chamber music ensemble consisting primarily of laptops like helo huddersfield experimental laptop orchestra",
|
||||
"tag": "etiopia",
|
||||
"_geo": {
|
||||
"lat": 51.05028653642387,
|
||||
"lng": 3.7301072771642096
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
"F"
|
||||
],
|
||||
"tag_in": null
|
||||
}
|
||||
{
|
||||
"id": "G",
|
||||
"word_rank": 1,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 1,
|
||||
"exact_rank": 3,
|
||||
"asc_desc_rank": 5,
|
||||
"sort_by_rank": 2,
|
||||
"geo_rank": 34692,
|
||||
"title": "hello world film",
|
||||
"description": "hello world is a 2019 japanese animated sci fi romantic drama film directed by tomohiko ito and produced by graphinica",
|
||||
"tag": "fehérorosz",
|
||||
"_geo": {
|
||||
"lat": 50.78776041427129,
|
||||
"lng": 2.661201766290338
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
7
|
||||
]
|
||||
}
|
||||
{
|
||||
"id": "H",
|
||||
"word_rank": 1,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 1,
|
||||
"attribute_rank": 1,
|
||||
"exact_rank": 3,
|
||||
"asc_desc_rank": 4,
|
||||
"sort_by_rank": 1,
|
||||
"geo_rank": 202182,
|
||||
"title": "world hello day",
|
||||
"description": "holiday observed on november 21 to express that conflicts should be resolved through communication rather than the use of force",
|
||||
"tag": "észak-korea",
|
||||
"_geo": {
|
||||
"lat": 48.875617484531965,
|
||||
"lng": 2.346747821504194
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
"H",
|
||||
8
|
||||
],
|
||||
"tag_in": 8
|
||||
}
|
||||
{
|
||||
"id": "I",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 9,
|
||||
"attribute_rank": 125,
|
||||
"exact_rank": 3,
|
||||
"asc_desc_rank": 3,
|
||||
"sort_by_rank": 0,
|
||||
"geo_rank": 740667,
|
||||
"title": "hello world song",
|
||||
"description": "hello world is a song written by tom douglas tony lane and david lee and recorded by american country music group lady antebellum",
|
||||
"tag": "etiopia",
|
||||
"_geo": {
|
||||
"lat": 43.973998070351065,
|
||||
"lng": 3.4661837318345032
|
||||
},
|
||||
"": "",
|
||||
"tag_in": "nine"
|
||||
}
|
||||
{
|
||||
"id": "J",
|
||||
"word_rank": 1,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 1,
|
||||
"attribute_rank": 2,
|
||||
"exact_rank": 3,
|
||||
"asc_desc_rank": 2,
|
||||
"sort_by_rank": 1,
|
||||
"geo_rank": 739020,
|
||||
"title": "hello cruel world",
|
||||
"description": "hello cruel world is an album by new zealand band tall dwarfs",
|
||||
"tag": "észak-korea",
|
||||
"_geo": {
|
||||
"lat": 43.98920130353838,
|
||||
"lng": 3.480519311627928
|
||||
},
|
||||
"": "",
|
||||
"opt1": {},
|
||||
"tag_in": 10
|
||||
}
|
||||
{
|
||||
"id": "K",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 2,
|
||||
"proximity_rank": 10,
|
||||
"attribute_rank": 213,
|
||||
"exact_rank": 6,
|
||||
"asc_desc_rank": 1,
|
||||
"sort_by_rank": 2,
|
||||
"geo_rank": 738830,
|
||||
"title": "hallo creation system",
|
||||
"description": "in few word hallo was a construction toy created by the american company mattel to engage girls in construction play",
|
||||
"tag": "fehérorosz",
|
||||
"_geo": {
|
||||
"lat": 43.99155030238669,
|
||||
"lng": 3.503453528249425
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
{
|
||||
"opt2": 11
|
||||
}
|
||||
],
|
||||
"tag_in": "eleven"
|
||||
}
|
||||
{
|
||||
"id": "L",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 2,
|
||||
"attribute_rank": 107,
|
||||
"exact_rank": 5,
|
||||
"asc_desc_rank": 0,
|
||||
"sort_by_rank": 0,
|
||||
"geo_rank": 737861,
|
||||
"title": "good morning world",
|
||||
"description": "good morning world is an american sitcom broadcast on cbs tv during the 1967 1968 season",
|
||||
"tag": "etiopia",
|
||||
"_geo": {
|
||||
"lat": 44.000507750283695,
|
||||
"lng": 3.5116812040621572
|
||||
},
|
||||
"": "",
|
||||
"opt1": {
|
||||
"opt2": [
|
||||
12
|
||||
]
|
||||
},
|
||||
"tag_in": 12
|
||||
}
|
||||
{
|
||||
"id": "M",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 3,
|
||||
"exact_rank": 0,
|
||||
"asc_desc_rank": 0,
|
||||
"sort_by_rank": 2,
|
||||
"geo_rank": 739203,
|
||||
"title": "hello world america",
|
||||
"description": "a perfect match for a perfect engine using the query hello world america",
|
||||
"tag": "fehérorosz",
|
||||
"_geo": {
|
||||
"lat": 43.99150729038736,
|
||||
"lng": 3.606143957295055
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
13,
|
||||
[
|
||||
{
|
||||
"opt2": null
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
{
|
||||
"id": "N",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 3,
|
||||
"exact_rank": 1,
|
||||
"asc_desc_rank": 4,
|
||||
"sort_by_rank": 1,
|
||||
"geo_rank": 9499586,
|
||||
"title": "hello world america unleashed",
|
||||
"description": "a very good match for a very good engine using the query hello world america",
|
||||
"tag": "észak-korea",
|
||||
"_geo": {
|
||||
"lat": 35.511540843367115,
|
||||
"lng": 138.764368875787
|
||||
},
|
||||
"": "",
|
||||
"opt1": {
|
||||
"a": 1,
|
||||
"opt2": {
|
||||
"opt3": 14
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
"id": "O",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 3,
|
||||
"exact_rank": 0,
|
||||
"asc_desc_rank": 6,
|
||||
"sort_by_rank": 0,
|
||||
"geo_rank": 9425163,
|
||||
"title": "a perfect match for a perfect engine using the query hello world america",
|
||||
"description": "hello world america",
|
||||
"tag": "etiopia",
|
||||
"_geo": {
|
||||
"lat": 35.00536702277189,
|
||||
"lng": 135.76118763940391
|
||||
},
|
||||
"": "",
|
||||
"opt1": [
|
||||
[
|
||||
[
|
||||
[]
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
{
|
||||
"id": "P",
|
||||
"word_rank": 0,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 3,
|
||||
"exact_rank": 1,
|
||||
"asc_desc_rank": 3,
|
||||
"sort_by_rank": 2,
|
||||
"geo_rank": 9422437,
|
||||
"title": "a very good match for a very good engine using the query hello world america",
|
||||
"description": "hello world america unleashed",
|
||||
"tag": "fehérorosz",
|
||||
"_geo": {
|
||||
"lat": 35.06462306367058,
|
||||
"lng": 135.8338440354251
|
||||
},
|
||||
"": "",
|
||||
"opt1.opt2": 16
|
||||
}
|
||||
{
|
||||
"id": "Q",
|
||||
"word_rank": 1,
|
||||
"typo_rank": 0,
|
||||
"proximity_rank": 0,
|
||||
"attribute_rank": 1,
|
||||
"exact_rank": 2,
|
||||
"asc_desc_rank": 2,
|
||||
"sort_by_rank": 1,
|
||||
"geo_rank": 9339230,
|
||||
"title": "hello world",
|
||||
"description": "a hello world program generally is a computer program that outputs or displays the message hello world",
|
||||
"tag": "észak-korea",
|
||||
"_geo": {
|
||||
"lat": 34.39548365683149,
|
||||
"lng": 132.4535960928883
|
||||
},
|
||||
"": ""
|
||||
}
|
@ -28,7 +28,7 @@ macro_rules! test_distinct {
|
||||
search.query(search::TEST_QUERY);
|
||||
search.limit($limit);
|
||||
search.exhaustive_number_hits($exhaustive);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let SearchResult { documents_ids, candidates, .. } = search.execute().unwrap();
|
||||
@ -37,7 +37,7 @@ macro_rules! test_distinct {
|
||||
|
||||
let mut distinct_values = HashSet::new();
|
||||
let expected_external_ids: Vec<_> =
|
||||
search::expected_order(&criteria, true, TermsMatchingStrategy::default(), &[])
|
||||
search::expected_order(&criteria, TermsMatchingStrategy::default(), &[])
|
||||
.into_iter()
|
||||
.filter_map(|d| {
|
||||
if distinct_values.contains(&d.$distinct) {
|
||||
|
@ -18,7 +18,7 @@ macro_rules! test_filter {
|
||||
let mut search = Search::new(&rtxn, &index);
|
||||
search.query(search::TEST_QUERY);
|
||||
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
search.filter(filter_conditions);
|
||||
|
||||
@ -26,7 +26,7 @@ macro_rules! test_filter {
|
||||
|
||||
let filtered_ids = search::expected_filtered_ids($filter);
|
||||
let expected_external_ids: Vec<_> =
|
||||
search::expected_order(&criteria, true, TermsMatchingStrategy::default(), &[])
|
||||
search::expected_order(&criteria, TermsMatchingStrategy::default(), &[])
|
||||
.into_iter()
|
||||
.filter_map(|d| if filtered_ids.contains(&d.id) { Some(d.id) } else { None })
|
||||
.collect();
|
||||
|
@ -61,7 +61,7 @@ pub fn setup_search_index_with_criteria(criteria: &[Criterion]) -> Index {
|
||||
|
||||
// index documents
|
||||
let config = IndexerConfig { max_memory: Some(10 * 1024 * 1024), ..Default::default() };
|
||||
let indexing_config = IndexDocumentsConfig { autogenerate_docids: true, ..Default::default() };
|
||||
let indexing_config = IndexDocumentsConfig::default();
|
||||
|
||||
let builder =
|
||||
IndexDocuments::new(&mut wtxn, &index, &config, indexing_config, |_| (), || false).unwrap();
|
||||
@ -96,7 +96,6 @@ pub fn internal_to_external_ids(index: &Index, internal_ids: &[DocumentId]) -> V
|
||||
|
||||
pub fn expected_order(
|
||||
criteria: &[Criterion],
|
||||
authorize_typo: bool,
|
||||
optional_words: TermsMatchingStrategy,
|
||||
sort_by: &[AscDesc],
|
||||
) -> Vec<TestDocument> {
|
||||
@ -156,14 +155,11 @@ pub fn expected_order(
|
||||
groups = std::mem::take(&mut new_groups);
|
||||
}
|
||||
|
||||
if authorize_typo && optional_words == TermsMatchingStrategy::default() {
|
||||
groups.into_iter().flatten().collect()
|
||||
} else if optional_words == TermsMatchingStrategy::default() {
|
||||
groups.into_iter().flatten().filter(|d| d.typo_rank == 0).collect()
|
||||
} else if authorize_typo {
|
||||
groups.into_iter().flatten().filter(|d| d.word_rank == 0).collect()
|
||||
} else {
|
||||
groups.into_iter().flatten().filter(|d| d.word_rank == 0 && d.typo_rank == 0).collect()
|
||||
match optional_words {
|
||||
TermsMatchingStrategy::Last => groups.into_iter().flatten().collect(),
|
||||
TermsMatchingStrategy::All => {
|
||||
groups.into_iter().flatten().filter(|d| d.word_rank == 0).collect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,6 @@ fn test_phrase_search_with_stop_words_given_criteria(criteria: &[Criterion]) {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("\"the use of force\"");
|
||||
search.limit(10);
|
||||
search.authorize_typos(false);
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::All);
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
|
@ -13,14 +13,12 @@ use Criterion::*;
|
||||
|
||||
use crate::search::{self, EXTERNAL_DOCUMENTS_IDS};
|
||||
|
||||
const ALLOW_TYPOS: bool = true;
|
||||
const DISALLOW_TYPOS: bool = false;
|
||||
const ALLOW_OPTIONAL_WORDS: TermsMatchingStrategy = TermsMatchingStrategy::Last;
|
||||
const DISALLOW_OPTIONAL_WORDS: TermsMatchingStrategy = TermsMatchingStrategy::All;
|
||||
const ASC_DESC_CANDIDATES_THRESHOLD: usize = 1000;
|
||||
|
||||
macro_rules! test_criterion {
|
||||
($func:ident, $optional_word:ident, $authorize_typos:ident, $criteria:expr, $sort_criteria:expr) => {
|
||||
($func:ident, $optional_word:ident, $criteria:expr, $sort_criteria:expr) => {
|
||||
#[test]
|
||||
fn $func() {
|
||||
let criteria = $criteria;
|
||||
@ -30,169 +28,60 @@ macro_rules! test_criterion {
|
||||
let mut search = Search::new(&rtxn, &index);
|
||||
search.query(search::TEST_QUERY);
|
||||
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
||||
search.authorize_typos($authorize_typos);
|
||||
search.terms_matching_strategy($optional_word);
|
||||
search.sort_criteria($sort_criteria);
|
||||
|
||||
let SearchResult { documents_ids, .. } = search.execute().unwrap();
|
||||
|
||||
let expected_external_ids: Vec<_> = search::expected_order(
|
||||
&criteria,
|
||||
$authorize_typos,
|
||||
$optional_word,
|
||||
&$sort_criteria[..],
|
||||
)
|
||||
.into_iter()
|
||||
.map(|d| d.id)
|
||||
.collect();
|
||||
let expected_external_ids: Vec<_> =
|
||||
search::expected_order(&criteria, $optional_word, &$sort_criteria[..])
|
||||
.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_criterion!(none_allow_typo, DISALLOW_OPTIONAL_WORDS, ALLOW_TYPOS, vec![], vec![]);
|
||||
test_criterion!(none_disallow_typo, DISALLOW_OPTIONAL_WORDS, DISALLOW_TYPOS, vec![], vec![]);
|
||||
test_criterion!(words_allow_typo, ALLOW_OPTIONAL_WORDS, ALLOW_TYPOS, vec![Words], vec![]);
|
||||
test_criterion!(none, DISALLOW_OPTIONAL_WORDS, vec![], vec![]);
|
||||
test_criterion!(words, ALLOW_OPTIONAL_WORDS, vec![Words], vec![]);
|
||||
test_criterion!(attribute, DISALLOW_OPTIONAL_WORDS, vec![Attribute], vec![]);
|
||||
test_criterion!(typo, DISALLOW_OPTIONAL_WORDS, vec![Typo], vec![]);
|
||||
test_criterion!(exactness, DISALLOW_OPTIONAL_WORDS, vec![Exactness], vec![]);
|
||||
test_criterion!(proximity, DISALLOW_OPTIONAL_WORDS, vec![Proximity], vec![]);
|
||||
test_criterion!(asc, DISALLOW_OPTIONAL_WORDS, vec![Asc(S("asc_desc_rank"))], vec![]);
|
||||
test_criterion!(desc, DISALLOW_OPTIONAL_WORDS, vec![Desc(S("asc_desc_rank"))], vec![]);
|
||||
test_criterion!(
|
||||
attribute_allow_typo,
|
||||
asc_unexisting_field,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Attribute],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(typo, DISALLOW_OPTIONAL_WORDS, ALLOW_TYPOS, vec![Typo], vec![]);
|
||||
test_criterion!(
|
||||
attribute_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Attribute],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
exactness_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Exactness],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
exactness_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Exactness],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
proximity_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Proximity],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
proximity_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Proximity],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
asc_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Asc(S("asc_desc_rank"))],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
asc_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Asc(S("asc_desc_rank"))],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
desc_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Desc(S("asc_desc_rank"))],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
desc_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Desc(S("asc_desc_rank"))],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
asc_unexisting_field_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Asc(S("unexisting_field"))],
|
||||
vec![]
|
||||
);
|
||||
|
||||
test_criterion!(
|
||||
asc_unexisting_field_disallow_typo,
|
||||
desc_unexisting_field,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Asc(S("unexisting_field"))],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
desc_unexisting_field_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Desc(S("unexisting_field"))],
|
||||
vec![]
|
||||
);
|
||||
|
||||
test_criterion!(empty_sort_by, DISALLOW_OPTIONAL_WORDS, vec![Sort], vec![]);
|
||||
test_criterion!(
|
||||
desc_unexisting_field_disallow_typo,
|
||||
sort_by_asc,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Desc(S("unexisting_field"))],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(empty_sort_by_allow_typo, DISALLOW_OPTIONAL_WORDS, ALLOW_TYPOS, vec![Sort], vec![]);
|
||||
test_criterion!(
|
||||
empty_sort_by_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Sort],
|
||||
vec![]
|
||||
);
|
||||
test_criterion!(
|
||||
sort_by_asc_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Sort],
|
||||
vec![AscDesc::Asc(Member::Field(S("tag")))]
|
||||
);
|
||||
test_criterion!(
|
||||
sort_by_asc_disallow_typo,
|
||||
sort_by_desc,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Sort],
|
||||
vec![AscDesc::Asc(Member::Field(S("tag")))]
|
||||
);
|
||||
test_criterion!(
|
||||
sort_by_desc_allow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Sort],
|
||||
vec![AscDesc::Desc(Member::Field(S("tag")))]
|
||||
);
|
||||
test_criterion!(
|
||||
sort_by_desc_disallow_typo,
|
||||
DISALLOW_OPTIONAL_WORDS,
|
||||
DISALLOW_TYPOS,
|
||||
vec![Sort],
|
||||
vec![AscDesc::Desc(Member::Field(S("tag")))]
|
||||
);
|
||||
test_criterion!(
|
||||
default_criteria_order,
|
||||
ALLOW_OPTIONAL_WORDS,
|
||||
ALLOW_TYPOS,
|
||||
vec![Words, Typo, Proximity, Attribute, Exactness],
|
||||
vec![]
|
||||
);
|
||||
@ -354,12 +243,11 @@ fn criteria_mixup() {
|
||||
search.query(search::TEST_QUERY);
|
||||
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
||||
search.terms_matching_strategy(ALLOW_OPTIONAL_WORDS);
|
||||
search.authorize_typos(ALLOW_TYPOS);
|
||||
|
||||
let SearchResult { documents_ids, .. } = search.execute().unwrap();
|
||||
|
||||
let expected_external_ids: Vec<_> =
|
||||
search::expected_order(&criteria, ALLOW_TYPOS, ALLOW_OPTIONAL_WORDS, &[])
|
||||
search::expected_order(&criteria, ALLOW_OPTIONAL_WORDS, &[])
|
||||
.into_iter()
|
||||
.map(|d| d.id)
|
||||
.collect();
|
||||
|
@ -14,7 +14,7 @@ fn sort_ranking_rule_missing() {
|
||||
let mut search = Search::new(&rtxn, &index);
|
||||
search.query(search::TEST_QUERY);
|
||||
search.limit(EXTERNAL_DOCUMENTS_IDS.len());
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
search.sort_criteria(vec![AscDesc::Asc(Member::Field(S("tag")))]);
|
||||
|
||||
|
@ -19,7 +19,7 @@ fn test_typo_tolerance_one_typo() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zeal");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -28,7 +28,7 @@ fn test_typo_tolerance_one_typo() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zean");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -46,7 +46,7 @@ fn test_typo_tolerance_one_typo() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zean");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -65,7 +65,7 @@ fn test_typo_tolerance_two_typo() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zealand");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -74,7 +74,7 @@ fn test_typo_tolerance_two_typo() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zealemd");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -92,7 +92,7 @@ fn test_typo_tolerance_two_typo() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zealemd");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -142,7 +142,7 @@ fn test_typo_disabled_on_word() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zealand");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -162,7 +162,7 @@ fn test_typo_disabled_on_word() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("zealand");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -182,7 +182,7 @@ fn test_disable_typo_on_attribute() {
|
||||
// typo in `antebel(l)um`
|
||||
search.query("antebelum");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
@ -200,7 +200,7 @@ fn test_disable_typo_on_attribute() {
|
||||
let mut search = Search::new(&txn, &index);
|
||||
search.query("antebelum");
|
||||
search.limit(10);
|
||||
search.authorize_typos(true);
|
||||
|
||||
search.terms_matching_strategy(TermsMatchingStrategy::default());
|
||||
|
||||
let result = search.execute().unwrap();
|
||||
|
Reference in New Issue
Block a user