From d26e9a96eccf990adbac69ead3450b85408f56d7 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Wed, 14 Jun 2023 22:07:06 +0200 Subject: [PATCH] Add score details to new search tests --- milli/src/search/new/tests/attribute_fid.rs | 16 +- .../search/new/tests/attribute_position.rs | 126 +++--- milli/src/search/new/tests/exactness.rs | 131 +++++-- milli/src/search/new/tests/geo_sort.rs | 147 +++++-- .../src/search/new/tests/ngram_split_words.rs | 5 +- milli/src/search/new/tests/proximity.rs | 36 +- milli/src/search/new/tests/proximity_typo.rs | 35 +- ...__attribute_fid__attribute_fid_ngrams.snap | 244 ++++++++++++ ...__attribute_fid__attribute_fid_simple.snap | 244 ++++++++++++ ...__attribute_position_different_fields.snap | 244 ++++++++++++ ...e_position__attribute_position_ngrams.snap | 244 ++++++++++++ ...position__attribute_position_repeated.snap | 91 +++++ ...position__attribute_position_simple-2.snap | 244 ++++++++++++ ...sts__exactness__exactness_after_words.snap | 366 ++++++++++++++++++ ...s__exactness_all_candidates_with_typo.snap | 106 +++++ ...ctness_attribute_starts_with_phrase-3.snap | 126 ++++++ ...xactness_attribute_starts_with_phrase.snap | 86 ++++ ...xactness_attribute_starts_with_simple.snap | 66 ++++ ...ollowed_by_typo_prefer_no_typo_prefix.snap | 136 +++++++ ...__exactness__exactness_simple_ordered.snap | 186 +++++++++ ...s__exactness__exactness_simple_random.snap | 126 ++++++ ...xactness__exactness_simple_reversed-3.snap | 146 +++++++ ..._exactness__exactness_simple_reversed.snap | 146 +++++++ ...xactness__proximity_after_exactness-4.snap | 84 ++++ ..._exactness__proximity_after_exactness.snap | 240 ++++++++++++ ...exactness__typo_followed_by_exactness.snap | 110 ++++++ ...sts__exactness__words_after_exactness.snap | 366 ++++++++++++++++++ ...rch__new__tests__geo_sort__geo_sort-2.snap | 168 ++++++++ ...rch__new__tests__geo_sort__geo_sort-4.snap | 168 ++++++++ ..._around_the_edge_of_the_flat_earth-10.snap | 91 +++++ ..._around_the_edge_of_the_flat_earth-12.snap | 91 +++++ ..._around_the_edge_of_the_flat_earth-14.snap | 91 +++++ ..._around_the_edge_of_the_flat_earth-16.snap | 91 +++++ ..._around_the_edge_of_the_flat_earth-18.snap | 91 +++++ ...t_around_the_edge_of_the_flat_earth-2.snap | 91 +++++ ..._around_the_edge_of_the_flat_earth-20.snap | 91 +++++ ...t_around_the_edge_of_the_flat_earth-4.snap | 91 +++++ ...t_around_the_edge_of_the_flat_earth-6.snap | 91 +++++ ...t_around_the_edge_of_the_flat_earth-8.snap | 91 +++++ ...geo_sort__geo_sort_mixed_with_words-2.snap | 75 ++++ ...t_without_any_geo_faceted_documents-2.snap | 60 +++ ...ts__proximity__proximity_prefix_db-11.snap | 70 ++++ ...ts__proximity__proximity_prefix_db-14.snap | 70 ++++ ...sts__proximity__proximity_prefix_db-2.snap | 78 ++++ ...sts__proximity__proximity_prefix_db-5.snap | 78 ++++ ...sts__proximity__proximity_prefix_db-8.snap | 70 ++++ ...ts__proximity__proximity_split_word-2.snap | 46 +++ ...ts__proximity__proximity_split_word-5.snap | 30 ++ ...ts__proximity__proximity_split_word-8.snap | 30 ++ ..._search__new__tests__sort__redacted-2.snap | 206 ++++++++++ ...li__search__new__tests__sort__sort-11.snap | 206 ++++++++++ ...lli__search__new__tests__sort__sort-2.snap | 206 ++++++++++ ...lli__search__new__tests__sort__sort-5.snap | 206 ++++++++++ ...lli__search__new__tests__sort__sort-8.snap | 206 ++++++++++ ...s__stop_words__stop_words_in_phrase-6.snap | 129 ++++++ ...s__stop_words__stop_words_in_phrase-8.snap | 13 + ...h__new__tests__typo__typo_bucketing-2.snap | 12 + ...h__new__tests__typo__typo_bucketing-5.snap | 54 +++ ...h__new__tests__typo__typo_bucketing-8.snap | 54 +++ ...__tests__typo__typo_exact_attribute-4.snap | 9 + ..._new__tests__typo__typo_exact_word-12.snap | 9 + ..._not_preceded_by_words_ranking_rule-2.snap | 244 ++++++++++++ ..._not_preceded_by_words_ranking_rule-5.snap | 244 ++++++++++++ ...ch__new__tests__typo__typo_synonyms-2.snap | 30 ++ ...ch__new__tests__typo__typo_synonyms-5.snap | 30 ++ ..._proximity__trap_basic_and_complex1-2.snap | 62 +++ ...ests__typo_proximity__trap_complex2-2.snap | 34 ++ ...ms__words_proximity_tms_last_phrase-2.snap | 216 +++++++++++ ...ms__words_proximity_tms_last_phrase-5.snap | 160 ++++++++ ...ms__words_proximity_tms_last_simple-2.snap | 286 ++++++++++++++ ...ms__words_proximity_tms_last_simple-5.snap | 286 ++++++++++++++ ...ew__tests__words_tms__words_tms_all-2.snap | 102 +++++ ...s__words_tms__words_tms_last_phrase-2.snap | 86 ++++ ...s__words_tms__words_tms_last_phrase-5.snap | 54 +++ ...s__words_tms__words_tms_last_simple-2.snap | 166 ++++++++ milli/src/search/new/tests/sort.rs | 50 ++- milli/src/search/new/tests/stop_words.rs | 339 +++++++++++++++- milli/src/search/new/tests/typo.rs | 95 +++-- milli/src/search/new/tests/typo_proximity.rs | 8 +- milli/src/search/new/tests/words_tms.rs | 48 ++- 80 files changed, 9639 insertions(+), 161 deletions(-) create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_ngrams.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_simple.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_different_fields.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_ngrams.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_repeated.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_simple-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_after_words.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_all_candidates_with_typo.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase-3.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_simple.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_followed_by_typo_prefer_no_typo_prefix.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_ordered.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_random.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed-3.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness-4.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__typo_followed_by_exactness.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__words_after_exactness.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-4.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-10.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-12.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-14.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-16.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-18.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-20.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-4.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-6.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-8.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_mixed_with_words-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_without_any_geo_faceted_documents-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-11.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-14.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-8.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-8.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__redacted-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-11.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-8.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-6.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-8.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-8.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_attribute-4.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_word-12.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_basic_and_complex1-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_complex2-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_all-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-2.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-5.snap create mode 100644 milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_simple-2.snap diff --git a/milli/src/search/new/tests/attribute_fid.rs b/milli/src/search/new/tests/attribute_fid.rs index 132595a35..09e52a394 100644 --- a/milli/src/search/new/tests/attribute_fid.rs +++ b/milli/src/search/new/tests/attribute_fid.rs @@ -122,8 +122,11 @@ fn test_attribute_fid_simple() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 6, 5, 4, 3, 9, 8, 7, 11, 10, 13, 12, 14, 0]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); } #[test] @@ -135,6 +138,11 @@ fn test_attribute_fid_ngrams() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 6, 5, 4, 3, 9, 8, 7, 11, 10, 13, 12, 14, 0]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); } diff --git a/milli/src/search/new/tests/attribute_position.rs b/milli/src/search/new/tests/attribute_position.rs index 5bbb5b117..1513528ec 100644 --- a/milli/src/search/new/tests/attribute_position.rs +++ b/milli/src/search/new/tests/attribute_position.rs @@ -40,68 +40,68 @@ fn create_index() -> TempIndex { }, { "id": 5, - "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a the quick brown fox", }, { "id": 6, - "text": "quick a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + "text": "quick a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a brown", }, { "id": 7, - "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a quickbrown", }, { "id": 8, - "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a quick brown", }, { "id": 9, - "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a - a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + "text": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a + a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a quickbrown", }, { @@ -137,8 +137,13 @@ fn test_attribute_position_simple() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("quick brown"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[10, 12, 11, 13, 3, 4, 2, 0, 1, 6, 8, 7, 9, 5]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); } #[test] fn test_attribute_position_repeated() { @@ -149,8 +154,13 @@ fn test_attribute_position_repeated() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("a a a a a"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[5, 7, 8, 9, 6]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); } #[test] @@ -162,8 +172,13 @@ fn test_attribute_position_different_fields() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("quick brown"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[10, 12, 11, 13, 3, 4, 2, 0, 1, 6, 8, 7, 9, 5]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); } #[test] @@ -175,6 +190,11 @@ fn test_attribute_position_ngrams() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("quick brown"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[10, 12, 11, 13, 3, 4, 2, 0, 1, 6, 8, 7, 9, 5]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); } diff --git a/milli/src/search/new/tests/exactness.rs b/milli/src/search/new/tests/exactness.rs index c5c963ede..a486342c1 100644 --- a/milli/src/search/new/tests/exactness.rs +++ b/milli/src/search/new/tests/exactness.rs @@ -474,8 +474,14 @@ fn test_exactness_simple_ordered() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 8, 7, 6, 5, 4, 3, 2, 1]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -501,8 +507,14 @@ fn test_exactness_simple_reversed() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 8, 3, 4, 5, 6, 7]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -519,8 +531,14 @@ fn test_exactness_simple_reversed() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 8, 3, 4, 5, 6, 7]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -544,8 +562,14 @@ fn test_exactness_simple_random() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[8, 7, 4, 6, 3, 5]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -568,8 +592,14 @@ fn test_exactness_attribute_starts_with_simple() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("this balcony"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 1, 0]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -589,8 +619,14 @@ fn test_exactness_attribute_starts_with_phrase() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("\"overlooking the sea\" is a beautiful balcony"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6, 5, 4, 1]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -604,8 +640,14 @@ fn test_exactness_attribute_starts_with_phrase() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("overlooking the sea is a beautiful balcony"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6, 5, 4, 3, 1, 7]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -628,8 +670,14 @@ fn test_exactness_all_candidates_with_typo() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("overlocking the sea is a beautiful balcony"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[4, 5, 6, 1, 7]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); // "overlooking" is returned here because the term matching strategy allows it // but it has the worst exactness score (0 exact words) @@ -659,8 +707,14 @@ fn test_exactness_after_words() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); - insta::assert_snapshot!(format!("{documents_ids:?}"), @"[19, 9, 18, 8, 17, 16, 6, 7, 15, 5, 14, 4, 13, 3, 12, 2, 1, 11]"); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" @@ -702,7 +756,13 @@ fn test_words_after_exactness() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[19, 9, 18, 8, 17, 16, 6, 7, 15, 5, 14, 4, 13, 3, 12, 2, 1, 11]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); @@ -745,7 +805,14 @@ fn test_proximity_after_exactness() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); + insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 1, 0, 4, 5, 8, 7, 3, 6]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); @@ -776,7 +843,13 @@ fn test_proximity_after_exactness() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 1, 2]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); @@ -804,7 +877,13 @@ fn test_exactness_followed_by_typo_prefer_no_typo_prefix() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("quick brown fox extra"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 1, 0, 4, 3]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); @@ -834,7 +913,13 @@ fn test_typo_followed_by_exactness() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); s.query("extraordinarily quick brown fox"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + + let document_ids_scores: Vec<_> = + documents_ids.iter().zip(document_scores.into_iter()).collect(); + insta::assert_snapshot!(format!("{document_ids_scores:#?}")); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[1, 0, 4, 3]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); diff --git a/milli/src/search/new/tests/geo_sort.rs b/milli/src/search/new/tests/geo_sort.rs index 1f0003082..0d65b589a 100644 --- a/milli/src/search/new/tests/geo_sort.rs +++ b/milli/src/search/new/tests/geo_sort.rs @@ -7,6 +7,7 @@ use heed::RoTxn; use maplit::hashset; use crate::index::tests::TempIndex; +use crate::score_details::ScoreDetails; use crate::search::new::tests::collect_field_values; use crate::{AscDesc, Criterion, GeoSortStrategy, Member, Search, SearchResult}; @@ -28,30 +29,37 @@ fn execute_iterative_and_rtree_returns_the_same<'a>( rtxn: &RoTxn<'a>, index: &TempIndex, search: &mut Search<'a>, -) -> Vec { +) -> (Vec, Vec>) { search.geo_sort_strategy(GeoSortStrategy::AlwaysIterative(2)); - let SearchResult { documents_ids, .. } = search.execute().unwrap(); + let SearchResult { documents_ids, document_scores: iterative_scores_bucketed, .. } = + search.execute().unwrap(); let iterative_ids_bucketed = collect_field_values(index, rtxn, "id", &documents_ids); search.geo_sort_strategy(GeoSortStrategy::AlwaysIterative(1000)); - let SearchResult { documents_ids, .. } = search.execute().unwrap(); + let SearchResult { documents_ids, document_scores: iterative_scores, .. } = + search.execute().unwrap(); let iterative_ids = collect_field_values(index, rtxn, "id", &documents_ids); assert_eq!(iterative_ids_bucketed, iterative_ids, "iterative bucket"); + assert_eq!(iterative_scores_bucketed, iterative_scores, "iterative bucket score"); search.geo_sort_strategy(GeoSortStrategy::AlwaysRtree(2)); - let SearchResult { documents_ids, .. } = search.execute().unwrap(); + let SearchResult { documents_ids, document_scores: rtree_scores_bucketed, .. } = + search.execute().unwrap(); let rtree_ids_bucketed = collect_field_values(index, rtxn, "id", &documents_ids); search.geo_sort_strategy(GeoSortStrategy::AlwaysRtree(1000)); - let SearchResult { documents_ids, .. } = search.execute().unwrap(); + let SearchResult { documents_ids, document_scores: rtree_scores, .. } = + search.execute().unwrap(); let rtree_ids = collect_field_values(index, rtxn, "id", &documents_ids); assert_eq!(rtree_ids_bucketed, rtree_ids, "rtree bucket"); + assert_eq!(rtree_scores_bucketed, rtree_scores, "rtree bucket score"); assert_eq!(iterative_ids, rtree_ids, "iterative vs rtree"); + assert_eq!(iterative_scores, rtree_scores, "iterative vs rtree scores"); - iterative_ids.into_iter().map(|id| id.parse().unwrap()).collect() + (iterative_ids.into_iter().map(|id| id.parse().unwrap()).collect(), iterative_scores) } #[test] @@ -73,14 +81,17 @@ fn test_geo_sort() { let rtxn = index.read_txn().unwrap(); let mut s = Search::new(&rtxn, &index); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Asc(Member::Geo([0., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[0, 1, 2, 3, 4, 5, 6, 8, 7, 10, 9]"); + insta::assert_snapshot!(format!("{scores:#?}")); s.sort_criteria(vec![AscDesc::Desc(Member::Geo([0., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[5, 4, 3, 2, 1, 0, 6, 8, 7, 10, 9]"); + insta::assert_snapshot!(format!("{scores:#?}")); } #[test] @@ -101,52 +112,63 @@ fn test_geo_sort_around_the_edge_of_the_flat_earth() { let rtxn = index.read_txn().unwrap(); let mut s = Search::new(&rtxn, &index); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); // --- asc s.sort_criteria(vec![AscDesc::Asc(Member::Geo([0., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[0, 1, 2, 3, 4]"); + insta::assert_snapshot!(format!("{scores:#?}")); // ensuring the lat doesn't wrap around s.sort_criteria(vec![AscDesc::Asc(Member::Geo([85., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[1, 0, 3, 4, 2]"); + insta::assert_snapshot!(format!("{scores:#?}")); s.sort_criteria(vec![AscDesc::Asc(Member::Geo([-85., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[2, 0, 3, 4, 1]"); + insta::assert_snapshot!(format!("{scores:#?}")); // ensuring the lng does wrap around s.sort_criteria(vec![AscDesc::Asc(Member::Geo([0., 175.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[3, 4, 2, 1, 0]"); + insta::assert_snapshot!(format!("{scores:#?}")); s.sort_criteria(vec![AscDesc::Asc(Member::Geo([0., -175.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[4, 3, 2, 1, 0]"); + insta::assert_snapshot!(format!("{scores:#?}")); // --- desc s.sort_criteria(vec![AscDesc::Desc(Member::Geo([0., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[4, 3, 2, 1, 0]"); + insta::assert_snapshot!(format!("{scores:#?}")); // ensuring the lat doesn't wrap around s.sort_criteria(vec![AscDesc::Desc(Member::Geo([85., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[2, 4, 3, 0, 1]"); + insta::assert_snapshot!(format!("{scores:#?}")); s.sort_criteria(vec![AscDesc::Desc(Member::Geo([-85., 0.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[1, 4, 3, 0, 2]"); + insta::assert_snapshot!(format!("{scores:#?}")); // ensuring the lng does wrap around s.sort_criteria(vec![AscDesc::Desc(Member::Geo([0., 175.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[0, 1, 2, 4, 3]"); + insta::assert_snapshot!(format!("{scores:#?}")); s.sort_criteria(vec![AscDesc::Desc(Member::Geo([0., -175.]))]); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[0, 1, 2, 3, 4]"); + insta::assert_snapshot!(format!("{scores:#?}")); } #[test] @@ -166,19 +188,98 @@ fn geo_sort_mixed_with_words() { let rtxn = index.read_txn().unwrap(); let mut s = Search::new(&rtxn, &index); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Asc(Member::Geo([0., 0.]))]); s.query("jean"); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[0, 2, 3]"); + insta::assert_snapshot!(format!("{scores:#?}")); s.query("bob"); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[2, 4]"); + insta::assert_snapshot!(format!("{scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + ] + "###); s.query("intel"); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[1]"); + insta::assert_snapshot!(format!("{scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + ] + "###); } #[test] @@ -198,9 +299,11 @@ fn geo_sort_without_any_geo_faceted_documents() { let rtxn = index.read_txn().unwrap(); let mut s = Search::new(&rtxn, &index); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Asc(Member::Geo([0., 0.]))]); s.query("jean"); - let ids = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); + let (ids, scores) = execute_iterative_and_rtree_returns_the_same(&rtxn, &index, &mut s); insta::assert_snapshot!(format!("{ids:?}"), @"[0, 2, 3]"); + insta::assert_snapshot!(format!("{scores:#?}")); } diff --git a/milli/src/search/new/tests/ngram_split_words.rs b/milli/src/search/new/tests/ngram_split_words.rs index fb99b8ba2..8427dd65b 100644 --- a/milli/src/search/new/tests/ngram_split_words.rs +++ b/milli/src/search/new/tests/ngram_split_words.rs @@ -80,10 +80,13 @@ fn test_2gram_simple() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("sun flower"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // will also match documents with "sunflower" + prefix tolerance insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 1, 2, 3, 5]"); + // scores are empty because the only rule is Words with All matching strategy + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[], [], [], [], []]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ diff --git a/milli/src/search/new/tests/proximity.rs b/milli/src/search/new/tests/proximity.rs index 5b369714c..b54007c6e 100644 --- a/milli/src/search/new/tests/proximity.rs +++ b/milli/src/search/new/tests/proximity.rs @@ -124,6 +124,8 @@ fn create_edge_cases_index() -> TempIndex { }, // The next 5 documents lay out a trap with the split word, phrase search, or synonym `sun flower`. // If the search query is "sunflower", the split word "Sun Flower" will match some documents. + // The next 5 documents lay out a trap with the split word, phrase search, or synonym `sun flower`. + // If the search query is "sunflower", the split word "Sun Flower" will match some documents. // If the query is `sunflower wilting`, then we should make sure that // the proximity condition `flower wilting: sprx N` also comes with the condition // `sun wilting: sprx N+1`, but this is not the exact condition we use for now. @@ -140,6 +142,7 @@ fn create_edge_cases_index() -> TempIndex { { "id": 3, // This document matches the query `sunflower wilting`, but the sprximity condition + // This document matches the query `sunflower wilting`, but the sprximity condition // between `sunflower` and `wilting` cannot be through the split-word `Sun Flower` // which would reduce to only `flower` and `wilting` being in sprximity. "text": "A flower wilting under the sun, unlike a sunflower" @@ -295,9 +298,12 @@ fn test_proximity_split_word() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("sunflower wilting"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 4, 5, 1, 3]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); + let texts = collect_field_values(&index, &txn, "text", &documents_ids); // "2" and "4" should be swapped ideally insta::assert_debug_snapshot!(texts, @r###" @@ -312,9 +318,11 @@ fn test_proximity_split_word() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("\"sun flower\" wilting"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 4, 1]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); // "2" and "4" should be swapped ideally insta::assert_debug_snapshot!(texts, @r###" @@ -337,9 +345,11 @@ fn test_proximity_split_word() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("xyz wilting"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[2, 4, 1]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); // "2" and "4" should be swapped ideally insta::assert_debug_snapshot!(texts, @r###" @@ -358,9 +368,11 @@ fn test_proximity_prefix_db() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("best s"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[10, 13, 9, 12, 8, 6, 7, 11, 15]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); // This test illustrates the loss of precision from using the prefix DB @@ -381,9 +393,11 @@ fn test_proximity_prefix_db() { // Difference when using the `su` prefix, which is not in the prefix DB let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("best su"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[10, 13, 9, 12, 8, 11, 7, 6, 15]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" @@ -406,9 +420,11 @@ fn test_proximity_prefix_db() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("best win"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[15, 16, 17, 18, 19, 20, 21, 22]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" @@ -428,9 +444,11 @@ fn test_proximity_prefix_db() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("best wint"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[19, 22, 18, 21, 17, 20, 16, 15]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" @@ -450,9 +468,11 @@ fn test_proximity_prefix_db() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("best wi"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[19, 22, 18, 21, 17, 15, 16, 20]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" diff --git a/milli/src/search/new/tests/proximity_typo.rs b/milli/src/search/new/tests/proximity_typo.rs index b459b178b..9fad21690 100644 --- a/milli/src/search/new/tests/proximity_typo.rs +++ b/milli/src/search/new/tests/proximity_typo.rs @@ -60,8 +60,41 @@ fn test_trap_basic() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("summer holiday"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 1]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + ], + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + ], + ] + "###); let texts = collect_field_values(&index, &txn, "text", &documents_ids); // This is incorrect, 1 should come before 0 insta::assert_debug_snapshot!(texts, @r###" diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_ngrams.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_ngrams.snap new file mode 100644 index 000000000..930a21626 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_ngrams.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/attribute_fid.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 2, + [ + Fid( + Rank { + rank: 19, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 91, + max_rank: 91, + }, + ), + ], + ), + ( + 6, + [ + Fid( + Rank { + rank: 15, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 81, + max_rank: 91, + }, + ), + ], + ), + ( + 5, + [ + Fid( + Rank { + rank: 14, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 79, + max_rank: 91, + }, + ), + ], + ), + ( + 4, + [ + Fid( + Rank { + rank: 13, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 77, + max_rank: 91, + }, + ), + ], + ), + ( + 3, + [ + Fid( + Rank { + rank: 12, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 83, + max_rank: 91, + }, + ), + ], + ), + ( + 9, + [ + Fid( + Rank { + rank: 11, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 75, + max_rank: 91, + }, + ), + ], + ), + ( + 8, + [ + Fid( + Rank { + rank: 10, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 79, + max_rank: 91, + }, + ), + ], + ), + ( + 7, + [ + Fid( + Rank { + rank: 10, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 73, + max_rank: 91, + }, + ), + ], + ), + ( + 11, + [ + Fid( + Rank { + rank: 7, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 77, + max_rank: 91, + }, + ), + ], + ), + ( + 10, + [ + Fid( + Rank { + rank: 6, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 81, + max_rank: 91, + }, + ), + ], + ), + ( + 13, + [ + Fid( + Rank { + rank: 6, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 81, + max_rank: 91, + }, + ), + ], + ), + ( + 12, + [ + Fid( + Rank { + rank: 6, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 78, + max_rank: 91, + }, + ), + ], + ), + ( + 14, + [ + Fid( + Rank { + rank: 5, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 75, + max_rank: 91, + }, + ), + ], + ), + ( + 0, + [ + Fid( + Rank { + rank: 1, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 91, + max_rank: 91, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_simple.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_simple.snap new file mode 100644 index 000000000..930a21626 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_fid__attribute_fid_simple.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/attribute_fid.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 2, + [ + Fid( + Rank { + rank: 19, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 91, + max_rank: 91, + }, + ), + ], + ), + ( + 6, + [ + Fid( + Rank { + rank: 15, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 81, + max_rank: 91, + }, + ), + ], + ), + ( + 5, + [ + Fid( + Rank { + rank: 14, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 79, + max_rank: 91, + }, + ), + ], + ), + ( + 4, + [ + Fid( + Rank { + rank: 13, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 77, + max_rank: 91, + }, + ), + ], + ), + ( + 3, + [ + Fid( + Rank { + rank: 12, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 83, + max_rank: 91, + }, + ), + ], + ), + ( + 9, + [ + Fid( + Rank { + rank: 11, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 75, + max_rank: 91, + }, + ), + ], + ), + ( + 8, + [ + Fid( + Rank { + rank: 10, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 79, + max_rank: 91, + }, + ), + ], + ), + ( + 7, + [ + Fid( + Rank { + rank: 10, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 73, + max_rank: 91, + }, + ), + ], + ), + ( + 11, + [ + Fid( + Rank { + rank: 7, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 77, + max_rank: 91, + }, + ), + ], + ), + ( + 10, + [ + Fid( + Rank { + rank: 6, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 81, + max_rank: 91, + }, + ), + ], + ), + ( + 13, + [ + Fid( + Rank { + rank: 6, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 81, + max_rank: 91, + }, + ), + ], + ), + ( + 12, + [ + Fid( + Rank { + rank: 6, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 78, + max_rank: 91, + }, + ), + ], + ), + ( + 14, + [ + Fid( + Rank { + rank: 5, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 75, + max_rank: 91, + }, + ), + ], + ), + ( + 0, + [ + Fid( + Rank { + rank: 1, + max_rank: 19, + }, + ), + Position( + Rank { + rank: 91, + max_rank: 91, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_different_fields.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_different_fields.snap new file mode 100644 index 000000000..2626ee7d4 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_different_fields.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/attribute_position.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 10, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 21, + max_rank: 21, + }, + ), + ], + ), + ( + 12, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 21, + max_rank: 21, + }, + ), + ], + ), + ( + 11, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 20, + max_rank: 21, + }, + ), + ], + ), + ( + 13, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 20, + max_rank: 21, + }, + ), + ], + ), + ( + 3, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 19, + max_rank: 21, + }, + ), + ], + ), + ( + 4, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 19, + max_rank: 21, + }, + ), + ], + ), + ( + 2, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 18, + max_rank: 21, + }, + ), + ], + ), + ( + 0, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 15, + max_rank: 21, + }, + ), + ], + ), + ( + 1, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 15, + max_rank: 21, + }, + ), + ], + ), + ( + 6, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 13, + max_rank: 21, + }, + ), + ], + ), + ( + 8, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 5, + max_rank: 21, + }, + ), + ], + ), + ( + 7, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 4, + max_rank: 21, + }, + ), + ], + ), + ( + 9, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 4, + max_rank: 21, + }, + ), + ], + ), + ( + 5, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 1, + max_rank: 21, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_ngrams.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_ngrams.snap new file mode 100644 index 000000000..2626ee7d4 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_ngrams.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/attribute_position.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 10, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 21, + max_rank: 21, + }, + ), + ], + ), + ( + 12, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 21, + max_rank: 21, + }, + ), + ], + ), + ( + 11, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 20, + max_rank: 21, + }, + ), + ], + ), + ( + 13, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 20, + max_rank: 21, + }, + ), + ], + ), + ( + 3, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 19, + max_rank: 21, + }, + ), + ], + ), + ( + 4, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 19, + max_rank: 21, + }, + ), + ], + ), + ( + 2, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 18, + max_rank: 21, + }, + ), + ], + ), + ( + 0, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 15, + max_rank: 21, + }, + ), + ], + ), + ( + 1, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 15, + max_rank: 21, + }, + ), + ], + ), + ( + 6, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 13, + max_rank: 21, + }, + ), + ], + ), + ( + 8, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 5, + max_rank: 21, + }, + ), + ], + ), + ( + 7, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 4, + max_rank: 21, + }, + ), + ], + ), + ( + 9, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 4, + max_rank: 21, + }, + ), + ], + ), + ( + 5, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 1, + max_rank: 21, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_repeated.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_repeated.snap new file mode 100644 index 000000000..73dec5f8b --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_repeated.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/attribute_position.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 5, + [ + Fid( + Rank { + rank: 11, + max_rank: 11, + }, + ), + Position( + Rank { + rank: 51, + max_rank: 51, + }, + ), + ], + ), + ( + 7, + [ + Fid( + Rank { + rank: 11, + max_rank: 11, + }, + ), + Position( + Rank { + rank: 51, + max_rank: 51, + }, + ), + ], + ), + ( + 8, + [ + Fid( + Rank { + rank: 11, + max_rank: 11, + }, + ), + Position( + Rank { + rank: 51, + max_rank: 51, + }, + ), + ], + ), + ( + 9, + [ + Fid( + Rank { + rank: 11, + max_rank: 11, + }, + ), + Position( + Rank { + rank: 51, + max_rank: 51, + }, + ), + ], + ), + ( + 6, + [ + Fid( + Rank { + rank: 11, + max_rank: 11, + }, + ), + Position( + Rank { + rank: 50, + max_rank: 51, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_simple-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_simple-2.snap new file mode 100644 index 000000000..2626ee7d4 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__attribute_position__attribute_position_simple-2.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/attribute_position.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 10, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 21, + max_rank: 21, + }, + ), + ], + ), + ( + 12, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 21, + max_rank: 21, + }, + ), + ], + ), + ( + 11, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 20, + max_rank: 21, + }, + ), + ], + ), + ( + 13, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 20, + max_rank: 21, + }, + ), + ], + ), + ( + 3, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 19, + max_rank: 21, + }, + ), + ], + ), + ( + 4, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 19, + max_rank: 21, + }, + ), + ], + ), + ( + 2, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 18, + max_rank: 21, + }, + ), + ], + ), + ( + 0, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 15, + max_rank: 21, + }, + ), + ], + ), + ( + 1, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 15, + max_rank: 21, + }, + ), + ], + ), + ( + 6, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 13, + max_rank: 21, + }, + ), + ], + ), + ( + 8, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 5, + max_rank: 21, + }, + ), + ], + ), + ( + 7, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 4, + max_rank: 21, + }, + ), + ], + ), + ( + 9, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 4, + max_rank: 21, + }, + ), + ], + ), + ( + 5, + [ + Fid( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Position( + Rank { + rank: 1, + max_rank: 21, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_after_words.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_after_words.snap new file mode 100644 index 000000000..ef95520bb --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_after_words.snap @@ -0,0 +1,366 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 19, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 9, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 7, + max_rank: 10, + }, + ), + ], + ), + ( + 18, + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 9, + max_rank: 9, + }, + ), + ], + ), + ( + 8, + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 9, + }, + ), + ], + ), + ( + 17, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 16, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + ), + ( + 15, + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 6, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 6, + }, + ), + ], + ), + ( + 14, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 5, + }, + ), + ], + ), + ( + 13, + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 4, + }, + ), + ], + ), + ( + 12, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 2, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 3, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 11, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_all_candidates_with_typo.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_all_candidates_with_typo.snap new file mode 100644 index 000000000..d48bf9933 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_all_candidates_with_typo.snap @@ -0,0 +1,106 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 4, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 5, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 1, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase-3.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase-3.snap new file mode 100644 index 000000000..991ff4cee --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase-3.snap @@ -0,0 +1,126 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 6, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 7, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase.snap new file mode 100644 index 000000000..703f3cb7a --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_phrase.snap @@ -0,0 +1,86 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 6, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 6, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 6, + max_rank: 6, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 6, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 7, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_simple.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_simple.snap new file mode 100644 index 000000000..eb6141468 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_attribute_starts_with_simple.snap @@ -0,0 +1,66 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 2, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 2, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 2, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 0, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 2, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_followed_by_typo_prefer_no_typo_prefix.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_followed_by_typo_prefer_no_typo_prefix.snap new file mode 100644 index 000000000..987e585a8 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_followed_by_typo_prefer_no_typo_prefix.snap @@ -0,0 +1,136 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 2, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 5, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + ], + ), + ( + 0, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 5, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 2, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 5, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 2, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 5, + }, + ), + Typo( + Typo { + typo_count: 2, + max_typo_count: 3, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_ordered.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_ordered.snap new file mode 100644 index 000000000..c5993a09e --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_ordered.snap @@ -0,0 +1,186 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 9, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 8, + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 9, + max_rank: 9, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 6, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + ), + ( + 2, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_random.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_random.snap new file mode 100644 index 000000000..d920eb4a0 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_random.snap @@ -0,0 +1,126 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 8, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed-3.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed-3.snap new file mode 100644 index 000000000..d0bc0fb46 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed-3.snap @@ -0,0 +1,146 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 9, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 8, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed.snap new file mode 100644 index 000000000..d0bc0fb46 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__exactness_simple_reversed.snap @@ -0,0 +1,146 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 9, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 8, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness-4.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness-4.snap new file mode 100644 index 000000000..21c6da724 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness-4.snap @@ -0,0 +1,84 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 0, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + Proximity( + Rank { + rank: 35, + max_rank: 57, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + Proximity( + Rank { + rank: 35, + max_rank: 57, + }, + ), + ], + ), + ( + 2, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + Proximity( + Rank { + rank: 35, + max_rank: 57, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness.snap new file mode 100644 index 000000000..7a33134cf --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__proximity_after_exactness.snap @@ -0,0 +1,240 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 2, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + Proximity( + Rank { + rank: 57, + max_rank: 57, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + Proximity( + Rank { + rank: 56, + max_rank: 57, + }, + ), + ], + ), + ( + 0, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + Proximity( + Rank { + rank: 35, + max_rank: 57, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + ), + ( + 8, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Proximity( + Rank { + rank: 21, + max_rank: 22, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Proximity( + Rank { + rank: 17, + max_rank: 22, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + Proximity( + Rank { + rank: 17, + max_rank: 22, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__typo_followed_by_exactness.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__typo_followed_by_exactness.snap new file mode 100644 index 000000000..6670f3e4f --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__typo_followed_by_exactness.snap @@ -0,0 +1,110 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 1, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 5, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + ], + ), + ( + 0, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 5, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 5, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + Typo( + Typo { + typo_count: 2, + max_typo_count: 5, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 5, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + Typo( + Typo { + typo_count: 2, + max_typo_count: 5, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 5, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__words_after_exactness.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__words_after_exactness.snap new file mode 100644 index 000000000..ef95520bb --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__exactness__words_after_exactness.snap @@ -0,0 +1,366 @@ +--- +source: milli/src/search/new/tests/exactness.rs +expression: "format!(\"{document_ids_scores:#?}\")" +--- +[ + ( + 19, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 10, + max_rank: 10, + }, + ), + ], + ), + ( + 9, + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 7, + max_rank: 10, + }, + ), + ], + ), + ( + 18, + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 9, + max_rank: 9, + }, + ), + ], + ), + ( + 8, + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 9, + }, + ), + ], + ), + ( + 17, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 16, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + ), + ( + 6, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + ), + ( + 7, + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + ), + ( + 15, + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 6, + max_rank: 6, + }, + ), + ], + ), + ( + 5, + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 6, + }, + ), + ], + ), + ( + 14, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 5, + max_rank: 5, + }, + ), + ], + ), + ( + 4, + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 5, + }, + ), + ], + ), + ( + 13, + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + ), + ( + 3, + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 4, + }, + ), + ], + ), + ( + 12, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ), + ( + 2, + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 3, + }, + ), + ], + ), + ( + 1, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), + ( + 11, + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + ExactAttribute( + ExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ), +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-2.snap new file mode 100644 index 000000000..0efa8f3a4 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-2.snap @@ -0,0 +1,168 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 1.0, + 1.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 2.0, + -1.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + -2.0, + -2.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 3.0, + 5.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 6.0, + -5.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-4.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-4.snap new file mode 100644 index 000000000..8f372e254 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort-4.snap @@ -0,0 +1,168 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 6.0, + -5.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 3.0, + 5.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + -2.0, + -2.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 2.0, + -1.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 1.0, + 1.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: None, + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: None, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-10.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-10.snap new file mode 100644 index 000000000..0f8bfa648 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-10.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: true, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: true, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-12.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-12.snap new file mode 100644 index 000000000..fbcdfc508 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-12.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-14.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-14.snap new file mode 100644 index 000000000..e948696c6 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-14.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-16.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-16.snap new file mode 100644 index 000000000..5747ecfdd --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-16.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: false, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-18.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-18.snap new file mode 100644 index 000000000..6ed2d8e12 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-18.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: false, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: false, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: false, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-2.snap new file mode 100644 index 000000000..45eba0c45 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-2.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-20.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-20.snap new file mode 100644 index 000000000..bb7cc3041 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-20.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: false, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: false, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: false, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + -175.0, + ], + ascending: false, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-4.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-4.snap new file mode 100644 index 000000000..ab344c098 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-4.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-6.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-6.snap new file mode 100644 index 000000000..2120ab105 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-6.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + -85.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-8.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-8.snap new file mode 100644 index 000000000..421e2b73a --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_around_the_edge_of_the_flat_earth-8.snap @@ -0,0 +1,91 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: true, + value: Some( + [ + 0.0, + -179.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: true, + value: Some( + [ + 88.0, + 0.0, + ], + ), + }, + ), + ], + [ + GeoSort( + GeoSort { + target_point: [ + 0.0, + 175.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_mixed_with_words-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_mixed_with_words-2.snap new file mode 100644 index 000000000..92523a9f3 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_mixed_with_words-2.snap @@ -0,0 +1,75 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 0.0, + ], + ), + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + -89.0, + 0.0, + ], + ), + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: Some( + [ + 0.0, + 178.0, + ], + ), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_without_any_geo_faceted_documents-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_without_any_geo_faceted_documents-2.snap new file mode 100644 index 000000000..7ce63c137 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__geo_sort__geo_sort_without_any_geo_faceted_documents-2.snap @@ -0,0 +1,60 @@ +--- +source: milli/src/search/new/tests/geo_sort.rs +expression: "format!(\"{scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + GeoSort( + GeoSort { + target_point: [ + 0.0, + 0.0, + ], + ascending: true, + value: None, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-11.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-11.snap new file mode 100644 index 000000000..0860aaf83 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-11.snap @@ -0,0 +1,70 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 4, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-14.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-14.snap new file mode 100644 index 000000000..ca74b9c58 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-14.snap @@ -0,0 +1,70 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-2.snap new file mode 100644 index 000000000..a6a01fbba --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-2.snap @@ -0,0 +1,78 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-5.snap new file mode 100644 index 000000000..13e49d4bc --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-5.snap @@ -0,0 +1,78 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 4, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-8.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-8.snap new file mode 100644 index 000000000..a7d18b8fc --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_prefix_db-8.snap @@ -0,0 +1,70 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-2.snap new file mode 100644 index 000000000..6a43c385e --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-2.snap @@ -0,0 +1,46 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-5.snap new file mode 100644 index 000000000..5d8caae94 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-5.snap @@ -0,0 +1,30 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-8.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-8.snap new file mode 100644 index 000000000..5d8caae94 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__proximity__proximity_split_word-8.snap @@ -0,0 +1,30 @@ +--- +source: milli/src/search/new/tests/proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__redacted-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__redacted-2.snap new file mode 100644 index 000000000..d94e0252d --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__redacted-2.snap @@ -0,0 +1,206 @@ +--- +source: milli/src/search/new/tests/sort.rs +expression: document_scores_json +--- +[ + { + "vague:asc": { + "order": 0, + "value": 0.0 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": 1.0 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": 1.0 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": 1.0 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": 1.1367 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": 1.2367 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": 1.5673 + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": "0" + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": "1" + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": "false" + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": "false" + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": "true" + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": "true" + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + }, + { + "vague:asc": { + "order": 0, + "value": null + }, + "": { + "order": 1, + "value": "" + } + } +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-11.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-11.snap new file mode 100644 index 000000000..76a732618 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-11.snap @@ -0,0 +1,206 @@ +--- +source: milli/src/search/new/tests/sort.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(2.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(1.5673), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(1.2367), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(1.1367), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Number(0.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: String("true"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: String("true"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: String("false"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: String("false"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: String("1"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: String("0"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: false, + redacted: false, + value: Null, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-2.snap new file mode 100644 index 000000000..5e70de729 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-2.snap @@ -0,0 +1,206 @@ +--- +source: milli/src/search/new/tests/sort.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("i"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("i"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("i"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("h"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("g"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("g"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("f"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("f"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("f"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("e"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("e"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("e"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("e"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("e"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("e"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("d"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("c"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("c"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("c"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "letter", + ascending: false, + redacted: false, + value: String("b"), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-5.snap new file mode 100644 index 000000000..6661bdc15 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-5.snap @@ -0,0 +1,206 @@ +--- +source: milli/src/search/new/tests/sort.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(5.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(4.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(3.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(2.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(2.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(2.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(2.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(2.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(0.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(0.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(0.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(0.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "rank", + ascending: false, + redacted: false, + value: Number(0.0), + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-8.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-8.snap new file mode 100644 index 000000000..9940a22c3 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__sort__sort-8.snap @@ -0,0 +1,206 @@ +--- +source: milli/src/search/new/tests/sort.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(0.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(1.0), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(1.1367), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(1.2367), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Number(1.5673), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: String("0"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: String("1"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: String("false"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: String("false"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: String("true"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: String("true"), + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], + [ + Sort( + Sort { + field_name: "vague", + ascending: true, + redacted: false, + value: Null, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-6.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-6.snap new file mode 100644 index 000000000..1ca6a33a4 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-6.snap @@ -0,0 +1,129 @@ +--- +source: milli/src/search/new/tests/stop_words.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 3, + max_matching_words: 3, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 31, + max_rank: 31, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 3, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 31, + max_rank: 31, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 3, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 27, + max_rank: 31, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-8.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-8.snap new file mode 100644 index 000000000..7a059b374 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__stop_words__stop_words_in_phrase-8.snap @@ -0,0 +1,13 @@ +--- +source: milli/src/search/new/tests/stop_words.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [], + [], + [], + [], + [], + [], + [], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-2.snap new file mode 100644 index 000000000..71a7e3ac4 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-2.snap @@ -0,0 +1,12 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [], + [], + [], + [], + [], + [], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-5.snap new file mode 100644 index 000000000..28c700539 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-5.snap @@ -0,0 +1,54 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 5, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 5, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 5, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 5, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 2, + max_typo_count: 5, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 5, + max_typo_count: 5, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-8.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-8.snap new file mode 100644 index 000000000..11830a905 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_bucketing-8.snap @@ -0,0 +1,54 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 6, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 6, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 2, + max_typo_count: 6, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 2, + max_typo_count: 6, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 3, + max_typo_count: 6, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 4, + max_typo_count: 6, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_attribute-4.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_attribute-4.snap new file mode 100644 index 000000000..cabea4842 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_attribute-4.snap @@ -0,0 +1,9 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [], + [], + [], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_word-12.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_word-12.snap new file mode 100644 index 000000000..cabea4842 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_exact_word-12.snap @@ -0,0 +1,9 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [], + [], + [], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-2.snap new file mode 100644 index 000000000..89f4d94ca --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-2.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 8, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 7, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 7, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 7, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 5, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 4, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + ], + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + ], + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 2, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-5.snap new file mode 100644 index 000000000..89f4d94ca --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_ranking_rule_not_preceded_by_words_ranking_rule-5.snap @@ -0,0 +1,244 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 8, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 7, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 7, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 7, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 5, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 4, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + ], + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + ], + [ + Words( + Words { + matching_words: 2, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 1, + max_typo_count: 2, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], + [ + Words( + Words { + matching_words: 1, + max_matching_words: 9, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-2.snap new file mode 100644 index 000000000..887f45b11 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-2.snap @@ -0,0 +1,30 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 13, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 13, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 13, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-5.snap new file mode 100644 index 000000000..18587e269 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo__typo_synonyms-5.snap @@ -0,0 +1,30 @@ +--- +source: milli/src/search/new/tests/typo.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 13, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 2, + max_typo_count: 13, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 2, + max_typo_count: 13, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_basic_and_complex1-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_basic_and_complex1-2.snap new file mode 100644 index 000000000..09cb68044 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_basic_and_complex1-2.snap @@ -0,0 +1,62 @@ +--- +source: milli/src/search/new/tests/typo_proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 0, + max_typo_count: 3, + }, + ), + Proximity( + Rank { + rank: 5, + max_rank: 8, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 3, + }, + ), + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 3, + }, + ), + Proximity( + Rank { + rank: 7, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_complex2-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_complex2-2.snap new file mode 100644 index 000000000..5b93dfecd --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__typo_proximity__trap_complex2-2.snap @@ -0,0 +1,34 @@ +--- +source: milli/src/search/new/tests/typo_proximity.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 5, + }, + ), + Proximity( + Rank { + rank: 15, + max_rank: 15, + }, + ), + ], + [ + Typo( + Typo { + typo_count: 1, + max_typo_count: 5, + }, + ), + Proximity( + Rank { + rank: 8, + max_rank: 15, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-2.snap new file mode 100644 index 000000000..61c39153f --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-2.snap @@ -0,0 +1,216 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 50, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 50, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 49, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 49, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 48, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 41, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 40, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 43, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 36, + max_rank: 36, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 31, + max_rank: 36, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 15, + max_rank: 15, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 15, + max_rank: 15, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 15, + max_rank: 15, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 8, + max_rank: 8, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-5.snap new file mode 100644 index 000000000..e43908ee7 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_phrase-5.snap @@ -0,0 +1,160 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 43, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 43, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 42, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 42, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 41, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 34, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 33, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 36, + max_rank: 36, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 29, + max_rank: 29, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 24, + max_rank: 29, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 15, + max_rank: 15, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-2.snap new file mode 100644 index 000000000..4fc992b3d --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-2.snap @@ -0,0 +1,286 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 57, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 57, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 56, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 56, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 55, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 54, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 53, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 52, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 51, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 48, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 47, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 50, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 43, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 38, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 29, + max_rank: 29, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 22, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 15, + max_rank: 15, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-5.snap new file mode 100644 index 000000000..1f070e381 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_proximity_tms_last_simple-5.snap @@ -0,0 +1,286 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 57, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 56, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 55, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 54, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 54, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 54, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 53, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 53, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 52, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 47, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 45, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 57, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 47, + max_rank: 50, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 40, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 35, + max_rank: 43, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 26, + max_rank: 29, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 19, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 19, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 19, + max_rank: 22, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + Proximity( + Rank { + rank: 13, + max_rank: 15, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_all-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_all-2.snap new file mode 100644 index 000000000..ff74473c8 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_all-2.snap @@ -0,0 +1,102 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Proximity( + Rank { + rank: 57, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 57, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 56, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 56, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 55, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 54, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 53, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 52, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 51, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 48, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 47, + max_rank: 57, + }, + ), + ], + [ + Proximity( + Rank { + rank: 1, + max_rank: 57, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-2.snap new file mode 100644 index 000000000..9b6b18a77 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-2.snap @@ -0,0 +1,86 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-5.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-5.snap new file mode 100644 index 000000000..d43e118bb --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_phrase-5.snap @@ -0,0 +1,54 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_simple-2.snap b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_simple-2.snap new file mode 100644 index 000000000..eecf623e5 --- /dev/null +++ b/milli/src/search/new/tests/snapshots/milli__search__new__tests__words_tms__words_tms_last_simple-2.snap @@ -0,0 +1,166 @@ +--- +source: milli/src/search/new/tests/words_tms.rs +expression: "format!(\"{document_scores:#?}\")" +--- +[ + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 9, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 8, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 7, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 5, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 9, + }, + ), + ], + [ + Words( + Words { + matching_words: 3, + max_matching_words: 9, + }, + ), + ], +] diff --git a/milli/src/search/new/tests/sort.rs b/milli/src/search/new/tests/sort.rs index 52acc646c..aa6aa971f 100644 --- a/milli/src/search/new/tests/sort.rs +++ b/milli/src/search/new/tests/sort.rs @@ -16,7 +16,9 @@ use maplit::hashset; use crate::index::tests::TempIndex; use crate::search::new::tests::collect_field_values; -use crate::{AscDesc, Criterion, Member, Search, SearchResult, TermsMatchingStrategy}; +use crate::{ + score_details, AscDesc, Criterion, Member, Search, SearchResult, TermsMatchingStrategy, +}; fn create_index() -> TempIndex { let index = TempIndex::new(); @@ -183,10 +185,12 @@ fn test_sort() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Desc(Member::Field(S("letter")))]); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[21, 22, 23, 20, 18, 19, 15, 16, 17, 9, 10, 11, 12, 13, 14, 8, 5, 6, 7, 2]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let letter_values = collect_field_values(&index, &txn, "letter", &documents_ids); insta::assert_debug_snapshot!(letter_values, @r###" @@ -216,10 +220,12 @@ fn test_sort() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Desc(Member::Field(S("rank")))]); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[14, 13, 12, 4, 7, 11, 17, 23, 1, 3, 6, 10, 16, 19, 22, 0, 2, 5, 8, 9]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let rank_values = collect_field_values(&index, &txn, "rank", &documents_ids); insta::assert_debug_snapshot!(rank_values, @r###" @@ -249,10 +255,12 @@ fn test_sort() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Asc(Member::Field(S("vague")))]); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 2, 4, 5, 22, 23, 13, 1, 3, 12, 21, 11, 20, 6, 7, 8, 9, 10, 14, 15]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let vague_values = collect_field_values(&index, &txn, "vague", &documents_ids); insta::assert_debug_snapshot!(vague_values, @r###" @@ -282,10 +290,12 @@ fn test_sort() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.sort_criteria(vec![AscDesc::Desc(Member::Field(S("vague")))]); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[4, 13, 23, 22, 2, 5, 0, 11, 20, 12, 21, 3, 1, 6, 7, 8, 9, 10, 14, 15]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let vague_values = collect_field_values(&index, &txn, "vague", &documents_ids); insta::assert_debug_snapshot!(vague_values, @r###" @@ -313,3 +323,33 @@ fn test_sort() { ] "###); } + +#[test] +fn test_redacted() { + let index = create_index(); + index + .update_settings(|s| { + s.set_displayed_fields(vec!["text".to_owned(), "vague".to_owned()]); + s.set_sortable_fields(hashset! { S("rank"), S("vague"), S("letter") }); + s.set_criteria(vec![Criterion::Sort]); + }) + .unwrap(); + + let txn = index.read_txn().unwrap(); + + let mut s = Search::new(&txn, &index); + s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + s.sort_criteria(vec![ + AscDesc::Asc(Member::Field(S("vague"))), + AscDesc::Asc(Member::Field(S("letter"))), + ]); + + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); + let document_scores_json: Vec<_> = document_scores + .iter() + .map(|scores| score_details::ScoreDetails::to_json_map(scores.iter())) + .collect(); + insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 2, 4, 5, 22, 23, 13, 1, 3, 12, 21, 11, 20, 6, 7, 8, 9, 10, 14, 15]"); + insta::assert_json_snapshot!(document_scores_json); +} diff --git a/milli/src/search/new/tests/stop_words.rs b/milli/src/search/new/tests/stop_words.rs index 92168f6d6..4ad587240 100644 --- a/milli/src/search/new/tests/stop_words.rs +++ b/milli/src/search/new/tests/stop_words.rs @@ -81,28 +81,212 @@ fn test_ignore_stop_words() { let mut s = Search::new(&txn, &index); s.query("xyz to the"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 9, + max_rank: 11, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ] + "###); // `xyz` is treated as a prefix here, so it's not ignored let mut s = Search::new(&txn, &index); s.query("to the xyz"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 2, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 9, + max_rank: 11, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ] + "###); // `xyz` is not treated as a prefix anymore because of the trailing space, so it's ignored let mut s = Search::new(&txn, &index); s.query("to the xyz "); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 1, + max_matching_words: 1, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 1, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 9, + max_rank: 11, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ] + "###); let mut s = Search::new(&txn, &index); s.query("to the dragon xyz"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 2, + max_matching_words: 3, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + Proximity( + Rank { + rank: 7, + max_rank: 8, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 17, + max_rank: 21, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 3, + max_rank: 3, + }, + ), + ], + ] + "###); } #[test] @@ -114,24 +298,163 @@ fn test_stop_words_in_phrase() { let mut s = Search::new(&txn, &index); s.query("\"how to train your dragon\""); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[3, 6]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 0, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 11, + max_rank: 11, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + [ + Words( + Words { + matching_words: 4, + max_matching_words: 4, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 0, + }, + ), + Proximity( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 11, + max_rank: 11, + }, + ), + ExactAttribute( + MatchesStart, + ), + Exactness( + Rank { + rank: 2, + max_rank: 2, + }, + ), + ], + ] + "###); let mut s = Search::new(&txn, &index); s.query("how \"to\" train \"the"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [ + Words( + Words { + matching_words: 3, + max_matching_words: 3, + }, + ), + Typo( + Typo { + typo_count: 0, + max_typo_count: 2, + }, + ), + Proximity( + Rank { + rank: 6, + max_rank: 8, + }, + ), + Fid( + Rank { + rank: 1, + max_rank: 1, + }, + ), + Position( + Rank { + rank: 29, + max_rank: 31, + }, + ), + ExactAttribute( + NoExactMatch, + ), + Exactness( + Rank { + rank: 4, + max_rank: 4, + }, + ), + ], + ] + "###); let mut s = Search::new(&txn, &index); s.query("how \"to\" train \"The dragon"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[3, 6, 5]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let mut s = Search::new(&txn, &index); s.query("\"to\""); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 1, 2, 3, 4, 5, 6]"); + // The search is handled as a placeholder search because it doesn't have any non-stop words in it. + // As a result the scores are empty lists + insta::assert_snapshot!(format!("{document_scores:#?}")); } diff --git a/milli/src/search/new/tests/typo.rs b/milli/src/search/new/tests/typo.rs index 536f6653d..4f5e851f5 100644 --- a/milli/src/search/new/tests/typo.rs +++ b/milli/src/search/new/tests/typo.rs @@ -160,8 +160,9 @@ fn test_no_typo() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -184,8 +185,14 @@ fn test_default_typo() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 23]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [], + [], + ] + "###); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -198,8 +205,9 @@ fn test_default_typo() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quack brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -211,8 +219,9 @@ fn test_default_typo() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quicest brownest fox jummps over the laziest dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[3]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -229,8 +238,9 @@ fn test_phrase_no_typo_allowed() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the \"quick brewn\" fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @"[]"); } @@ -258,8 +268,9 @@ fn test_typo_exact_word() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -271,15 +282,17 @@ fn test_typo_exact_word() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quack brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[]"); // words not in exact_words (quicest, jummps) have normal typo handling let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("the quicest brownest fox jummps over the laziest dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[3]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -290,9 +303,11 @@ fn test_typo_exact_word() { // exact words do not disable prefix (sunflowering OK, but no sunflowar) let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("network interconnection sunflower"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[16, 17, 18]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -327,9 +342,11 @@ fn test_typo_exact_attribute() { // Exact match returns both exact attributes and tolerant ones. let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 24, 25]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -350,9 +367,16 @@ fn test_typo_exact_attribute() { // 1 typo only returns the tolerant attribute let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quidk brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[24, 25]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [], + [], + ] + "###); let texts = collect_field_values(&index, &txn, "tolerant_text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -364,9 +388,16 @@ fn test_typo_exact_attribute() { // combine with exact words let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quivk brown fox jumps over the lazy dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[23, 25]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @r###" + [ + [], + [], + ] + "###); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -385,9 +416,11 @@ fn test_typo_exact_attribute() { // No result in tolerant attribute let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quicest brownest fox jummps over the laziest dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[]"); } #[test] @@ -397,9 +430,11 @@ fn test_ngram_typos() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the extra lagant fox skyrocketed over the languorous dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[6]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -409,9 +444,11 @@ fn test_ngram_typos() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the ex tra lagant fox skyrocketed over the languorous dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[]"); + insta::assert_snapshot!(format!("{document_scores:#?}"), @"[]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @"[]"); } @@ -428,9 +465,11 @@ fn test_typo_ranking_rule_not_preceded_by_words_ranking_rule() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids: ids_1, .. } = s.execute().unwrap(); + let SearchResult { documents_ids: ids_1, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{ids_1:?}"), @"[0, 23, 7, 8, 9, 22, 10, 11, 1, 2, 12, 13, 4, 3, 5, 6, 21]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &ids_1); insta::assert_debug_snapshot!(texts, @r###" [ @@ -462,9 +501,11 @@ fn test_typo_ranking_rule_not_preceded_by_words_ranking_rule() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::Last); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quick brown fox jumps over the lazy dog"); - let SearchResult { documents_ids: ids_2, .. } = s.execute().unwrap(); + let SearchResult { documents_ids: ids_2, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{ids_2:?}"), @"[0, 23, 7, 8, 9, 22, 10, 11, 1, 2, 12, 13, 4, 3, 5, 6, 21]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); assert_eq!(ids_1, ids_2); } @@ -478,9 +519,11 @@ fn test_typo_bucketing() { // First do the search with just the Words ranking rule let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("network interconnection sunflower"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[14, 15, 16, 17, 18, 20]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -504,9 +547,11 @@ fn test_typo_bucketing() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("network interconnection sunflower"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[16, 18, 17, 20, 15, 14]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -521,9 +566,11 @@ fn test_typo_bucketing() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("network interconnection sun flower"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[17, 19, 16, 18, 20, 15]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -555,9 +602,11 @@ fn test_typo_synonyms() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the quick brown fox jumps over the lackadaisical dog"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[0, 22, 23]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -569,12 +618,14 @@ fn test_typo_synonyms() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); s.query("the fast brownish fox jumps over the lackadaisical dog"); // The interaction of ngrams + synonyms means that the multi-word synonyms end up having a typo cost. // This is probably not what we want. - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[21, 0, 22]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ diff --git a/milli/src/search/new/tests/typo_proximity.rs b/milli/src/search/new/tests/typo_proximity.rs index 103cc4717..8dd110704 100644 --- a/milli/src/search/new/tests/typo_proximity.rs +++ b/milli/src/search/new/tests/typo_proximity.rs @@ -90,8 +90,10 @@ fn test_trap_basic_and_complex1() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("beautiful summer"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[1, 0, 3, 2]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -111,8 +113,10 @@ fn test_trap_complex2() { let mut s = Search::new(&txn, &index); s.terms_matching_strategy(TermsMatchingStrategy::All); s.query("delicious sweet dessert"); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[5, 4]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ diff --git a/milli/src/search/new/tests/words_tms.rs b/milli/src/search/new/tests/words_tms.rs index 826f9c47d..27213ecff 100644 --- a/milli/src/search/new/tests/words_tms.rs +++ b/milli/src/search/new/tests/words_tms.rs @@ -134,10 +134,12 @@ fn test_words_tms_last_simple() { let mut s = Search::new(&txn, &index); s.query("the quick brown fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // 6 and 7 have the same score because "the" appears twice insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 8, 6, 7, 5, 4, 11, 12, 3]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -167,8 +169,10 @@ fn test_words_tms_last_simple() { let mut s = Search::new(&txn, &index); s.query("extravagant the quick brown fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[]"); } #[test] @@ -179,10 +183,12 @@ fn test_words_tms_last_phrase() { let mut s = Search::new(&txn, &index); s.query("\"the quick brown fox\" jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // "The quick brown fox" is a phrase, not deleted by this term matching strategy insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 17, 21, 8, 6, 7, 5, 4, 11, 12]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -202,11 +208,13 @@ fn test_words_tms_last_phrase() { let mut s = Search::new(&txn, &index); s.query("\"the quick brown fox\" jumps over the \"lazy\" dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // "lazy" is a phrase, not deleted by this term matching strategy // but words before it can be deleted insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 17, 21, 8, 11, 12]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -222,10 +230,12 @@ fn test_words_tms_last_phrase() { let mut s = Search::new(&txn, &index); s.query("\"the quick brown fox jumps over the lazy dog\""); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // The whole query is a phrase, no terms are removed insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[Words(Words { matching_words: 9, max_matching_words: 9 })]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -236,10 +246,12 @@ fn test_words_tms_last_phrase() { let mut s = Search::new(&txn, &index); s.query("\"the quick brown fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // The whole query is still a phrase, even without closing quotes, so no terms are removed insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[[Words(Words { matching_words: 9, max_matching_words: 9 })]]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -261,10 +273,12 @@ fn test_words_proximity_tms_last_simple() { let mut s = Search::new(&txn, &index); s.query("the quick brown fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // 7 is better than 6 because of the proximity between "the" and its surrounding terms insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 21, 14, 17, 13, 10, 18, 19, 20, 16, 15, 22, 8, 7, 6, 5, 4, 11, 12, 3]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -294,10 +308,12 @@ fn test_words_proximity_tms_last_simple() { let mut s = Search::new(&txn, &index); s.query("the brown quick fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // 10 is better than 9 because of the proximity between "quick" and "brown" insta::assert_snapshot!(format!("{documents_ids:?}"), @"[10, 18, 19, 9, 20, 21, 14, 17, 13, 16, 15, 22, 8, 7, 6, 5, 4, 11, 12, 3]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -338,11 +354,13 @@ fn test_words_proximity_tms_last_phrase() { let mut s = Search::new(&txn, &index); s.query("the \"quick brown\" fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // "quick brown" is a phrase. The proximity of its first and last words // to their adjacent query words should be taken into account insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 21, 14, 17, 13, 16, 15, 8, 7, 6, 5, 4, 11, 12, 3]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -367,12 +385,14 @@ fn test_words_proximity_tms_last_phrase() { let mut s = Search::new(&txn, &index); s.query("the \"quick brown\" \"fox jumps\" over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::Last); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); // "quick brown" is a phrase. The proximity of its first and last words // to their adjacent query words should be taken into account. // The same applies to `fox jumps`. insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 21, 14, 17, 13, 16, 15, 8, 7, 6, 5]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -404,9 +424,11 @@ fn test_words_tms_all() { let mut s = Search::new(&txn, &index); s.query("the quick brown fox jumps over the lazy dog"); s.terms_matching_strategy(TermsMatchingStrategy::All); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[9, 21, 14, 17, 13, 10, 18, 19, 20, 16, 15, 22]"); + insta::assert_snapshot!(format!("{document_scores:#?}")); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @r###" [ @@ -428,9 +450,11 @@ fn test_words_tms_all() { let mut s = Search::new(&txn, &index); s.query("extravagant"); s.terms_matching_strategy(TermsMatchingStrategy::All); - let SearchResult { documents_ids, .. } = s.execute().unwrap(); + s.scoring_strategy(crate::score_details::ScoringStrategy::Detailed); + let SearchResult { documents_ids, document_scores, .. } = s.execute().unwrap(); insta::assert_snapshot!(format!("{documents_ids:?}"), @"[]"); + insta::assert_snapshot!(format!("{document_scores:?}"), @"[]"); let texts = collect_field_values(&index, &txn, "text", &documents_ids); insta::assert_debug_snapshot!(texts, @"[]"); }