mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-30 23:46:28 +00:00 
			
		
		
		
	refactorize everything related to the songs dataset in a songs benchmark file
This commit is contained in:
		| @@ -61,5 +61,5 @@ rand = "0.8.3" | ||||
| default = [] | ||||
|  | ||||
| [[bench]] | ||||
| name = "criterion" | ||||
| name = "songs" | ||||
| harness = false | ||||
|   | ||||
| @@ -1,102 +0,0 @@ | ||||
| mod utils; | ||||
|  | ||||
| use criterion::{criterion_group, criterion_main}; | ||||
|  | ||||
| fn bench_criterion(c: &mut criterion::Criterion) { | ||||
|     let songs_base_queries = &[ | ||||
|                 "mingus ", | ||||
|                 "thelonious monk ", | ||||
|                 "Disneyland ", | ||||
|                 "the white stripes ", | ||||
|                 "indochine ", | ||||
|                 "klub des loosers ", | ||||
|                 "fear of the dark ", | ||||
|                 "michel delpech ", | ||||
|                 "stromae ", | ||||
|                 "dire straits ", | ||||
|                 "aretha franklin ", | ||||
|     ]; | ||||
|     let default_criterion: Vec<String> = milli::default_criteria().iter().map(|criteria| criteria.to_string()).collect(); | ||||
|     let default_criterion = default_criterion.iter().map(|s| s.as_str()); | ||||
|     let asc_default: Vec<&str> = std::iter::once("asc(released-timestamp)").chain(default_criterion.clone()).collect(); | ||||
|     let desc_default: Vec<&str> = std::iter::once("desc(released-timestamp)").chain(default_criterion.clone()).collect(); | ||||
|  | ||||
|     let confs = &[ | ||||
|         utils::Conf { | ||||
|             group_name: "proximity", | ||||
|             queries: &[ | ||||
|                 "black saint sinner lady ", | ||||
|                 "les dangeureuses 1960 ", | ||||
|                 "The Disneyland Sing-Along Chorus ", | ||||
|                 "Under Great Northern Lights ", | ||||
|                 "7000 Danses Un Jour Dans Notre Vie", | ||||
|             ], | ||||
|             criterion: Some(&["proximity"]), | ||||
|             optional_words: false, | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "typo", | ||||
|             queries: &[ | ||||
|                 "mongus ", | ||||
|                 "thelonius monk ", | ||||
|                 "Disnaylande ", | ||||
|                 "the white striper ", | ||||
|                 "indochie ", | ||||
|                 "indochien ", | ||||
|                 "klub des loopers ", | ||||
|                 "fear of the duck ", | ||||
|                 "michel depech ", | ||||
|                 "stromal ", | ||||
|                 "dire straights ", | ||||
|                 "Arethla Franklin ", | ||||
|             ], | ||||
|             criterion: Some(&["typo"]), | ||||
|             optional_words: false, | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "words", | ||||
|             queries: &[ | ||||
|                 "the black saint and the sinner lady and the good doggo ", // four words to pop | ||||
|                 "les liaisons dangeureuses 1793 ", // one word to pop | ||||
|                 "The Disneyland Children's Sing-Alone song ", // two words to pop | ||||
|                 "seven nation mummy ", // one word to pop | ||||
|                 "7000 Danses / Le Baiser / je me trompe de mots ", // four words to pop | ||||
|                 "Bring Your Daughter To The Slaughter but now this is not part of the title ", // nine words to pop | ||||
|                 "whathavenotnsuchforth and then a good amount of words tot pop in order to match the first one ", // 16 | ||||
|             ], | ||||
|             criterion: Some(&["words"]), | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "asc", | ||||
|             queries: songs_base_queries, | ||||
|             criterion: Some(&["asc(released-timestamp)"]), | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "desc", | ||||
|             queries: songs_base_queries, | ||||
|             criterion: Some(&["desc(released-timestamp)"]), | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "asc + default", | ||||
|             queries: songs_base_queries, | ||||
|             criterion: Some(&asc_default[..]), | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "desc + default", | ||||
|             queries: songs_base_queries, | ||||
|             criterion: Some(&desc_default[..]), | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|     ]; | ||||
|  | ||||
|     utils::run_benches(c, confs); | ||||
| } | ||||
|  | ||||
| criterion_group!(benches, bench_criterion); | ||||
| criterion_main!(benches); | ||||
| @@ -1,51 +0,0 @@ | ||||
| mod utils; | ||||
|  | ||||
| use criterion::{criterion_group, criterion_main}; | ||||
|  | ||||
| fn bench_normal(c: &mut criterion::Criterion) { | ||||
|     let confs = &[ | ||||
|         utils::Conf { | ||||
|             group_name: "basic placeholder", | ||||
|             queries: &[ | ||||
|                 "", | ||||
|             ], | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "basic without quote", | ||||
|             queries: &[ | ||||
|                 "david bowie", // 1200 | ||||
|                 "michael jackson", // 600 | ||||
|                 "marcus miller", // 60 | ||||
|                 "Notstandskomitee", // 4 | ||||
|             ], | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "basic with quote", | ||||
|             queries: &[ | ||||
|                 "\"david\" \"bowie\"", // 1200 | ||||
|                 "\"michael\" \"jackson\"", // 600 | ||||
|                 "\"marcus\" \"miller\"", // 60 | ||||
|                 "\"Notstandskomitee\"", // 4 | ||||
|             ], | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "prefix search", | ||||
|             queries: &[ | ||||
|                 "s", // 500k+ results | ||||
|                 "a", | ||||
|                 "b", | ||||
|                 "i", | ||||
|                 "x", // only 7k results | ||||
|             ], | ||||
|             ..utils::Conf::BASE_SONGS | ||||
|         }, | ||||
|     ]; | ||||
|  | ||||
|     utils::run_benches(c, confs); | ||||
| } | ||||
|  | ||||
| criterion_group!(benches, bench_normal); | ||||
| criterion_main!(benches); | ||||
							
								
								
									
										185
									
								
								milli/benches/songs.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								milli/benches/songs.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| mod utils; | ||||
|  | ||||
| use criterion::{criterion_group, criterion_main}; | ||||
| use milli::update::Settings; | ||||
| use utils::Conf; | ||||
|  | ||||
| fn base_conf(builder: &mut Settings) { | ||||
|     let displayed_fields = [ | ||||
|         "id", "title", "album", "artist", "genre", "country", "released", "duration", | ||||
|     ] | ||||
|     .iter() | ||||
|     .map(|s| s.to_string()) | ||||
|     .collect(); | ||||
|     builder.set_displayed_fields(displayed_fields); | ||||
|  | ||||
|     let searchable_fields = ["title", "album", "artist"] | ||||
|         .iter() | ||||
|         .map(|s| s.to_string()) | ||||
|         .collect(); | ||||
|     builder.set_searchable_fields(searchable_fields); | ||||
|  | ||||
|     let faceted_fields = [ | ||||
|         ("released-timestamp", "integer"), | ||||
|         ("duration-float", "float"), | ||||
|         ("genre", "string"), | ||||
|         ("country", "string"), | ||||
|         ("artist", "string"), | ||||
|     ] | ||||
|     .iter() | ||||
|     .map(|(a, b)| (a.to_string(), b.to_string())) | ||||
|     .collect(); | ||||
|     builder.set_faceted_fields(faceted_fields); | ||||
| } | ||||
|  | ||||
| const BASE_CONF: Conf = Conf { | ||||
|     dataset: "smol-songs.csv", | ||||
|     queries: &[ | ||||
|         "mingus ", | ||||
|         "thelonious monk ", | ||||
|         "Disneyland ", | ||||
|         "the white stripes ", | ||||
|         "indochine ", | ||||
|         "klub des loosers ", | ||||
|         "fear of the dark ", | ||||
|         "michel delpech ", | ||||
|         "stromae ", | ||||
|         "dire straits ", | ||||
|         "aretha franklin ", | ||||
|     ], | ||||
|     configure: base_conf, | ||||
|     ..Conf::BASE | ||||
| }; | ||||
|  | ||||
| fn bench_songs(c: &mut criterion::Criterion) { | ||||
|     let default_criterion: Vec<String> = milli::default_criteria() | ||||
|         .iter() | ||||
|         .map(|criteria| criteria.to_string()) | ||||
|         .collect(); | ||||
|     let default_criterion = default_criterion.iter().map(|s| s.as_str()); | ||||
|     let asc_default: Vec<&str> = std::iter::once("asc(released-timestamp)") | ||||
|         .chain(default_criterion.clone()) | ||||
|         .collect(); | ||||
|     let desc_default: Vec<&str> = std::iter::once("desc(released-timestamp)") | ||||
|         .chain(default_criterion.clone()) | ||||
|         .collect(); | ||||
|  | ||||
|     let confs = &[ | ||||
|         /* first we bench each criterion alone */ | ||||
|         utils::Conf { | ||||
|             group_name: "proximity", | ||||
|             queries: &[ | ||||
|                 "black saint sinner lady ", | ||||
|                 "les dangeureuses 1960 ", | ||||
|                 "The Disneyland Sing-Along Chorus ", | ||||
|                 "Under Great Northern Lights ", | ||||
|                 "7000 Danses Un Jour Dans Notre Vie", | ||||
|             ], | ||||
|             criterion: Some(&["proximity"]), | ||||
|             optional_words: false, | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "typo", | ||||
|             queries: &[ | ||||
|                 "mongus ", | ||||
|                 "thelonius monk ", | ||||
|                 "Disnaylande ", | ||||
|                 "the white striper ", | ||||
|                 "indochie ", | ||||
|                 "indochien ", | ||||
|                 "klub des loopers ", | ||||
|                 "fear of the duck ", | ||||
|                 "michel depech ", | ||||
|                 "stromal ", | ||||
|                 "dire straights ", | ||||
|                 "Arethla Franklin ", | ||||
|             ], | ||||
|             criterion: Some(&["typo"]), | ||||
|             optional_words: false, | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "words", | ||||
|             queries: &[ | ||||
|                 "the black saint and the sinner lady and the good doggo ", // four words to pop | ||||
|                 "les liaisons dangeureuses 1793 ", // one word to pop | ||||
|                 "The Disneyland Children's Sing-Alone song ", // two words to pop | ||||
|                 "seven nation mummy ", // one word to pop | ||||
|                 "7000 Danses / Le Baiser / je me trompe de mots ", // four words to pop | ||||
|                 "Bring Your Daughter To The Slaughter but now this is not part of the title ", // nine words to pop | ||||
|                 "whathavenotnsuchforth and a good amount of words to pop to match the first one ", // 16 | ||||
|             ], | ||||
|             criterion: Some(&["words"]), | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "asc", | ||||
|             criterion: Some(&["asc(released-timestamp)"]), | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "desc", | ||||
|             criterion: Some(&["desc(released-timestamp)"]), | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|  | ||||
|         /* then we bench the asc and desc criterion on top of the default criterion */ | ||||
|         utils::Conf { | ||||
|             group_name: "asc + default", | ||||
|             criterion: Some(&asc_default[..]), | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "desc + default", | ||||
|             criterion: Some(&desc_default[..]), | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|  | ||||
|         /* the we bench some global / normal search with all the default criterion in the default | ||||
|          * order */ | ||||
|         utils::Conf { | ||||
|             group_name: "basic placeholder", | ||||
|             queries: &[ | ||||
|                 "", | ||||
|             ], | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "basic without quote", | ||||
|             queries: &[ | ||||
|                 "david bowie", // 1200 | ||||
|                 "michael jackson", // 600 | ||||
|                 "marcus miller", // 60 | ||||
|                 "Notstandskomitee", // 4 | ||||
|             ], | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "basic with quote", | ||||
|             queries: &[ | ||||
|                 "\"david\" \"bowie\"", // 1200 | ||||
|                 "\"michael\" \"jackson\"", // 600 | ||||
|                 "\"marcus\" \"miller\"", // 60 | ||||
|                 "\"Notstandskomitee\"", // 4 | ||||
|             ], | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         utils::Conf { | ||||
|             group_name: "prefix search", | ||||
|             queries: &[ | ||||
|                 "s", // 500k+ results | ||||
|                 "a", | ||||
|                 "b", | ||||
|                 "i", | ||||
|                 "x", // only 7k results | ||||
|             ], | ||||
|             ..BASE_CONF | ||||
|         }, | ||||
|         ]; | ||||
|  | ||||
|     utils::run_benches(c, confs); | ||||
| } | ||||
|  | ||||
| criterion_group!(benches, bench_songs); | ||||
| criterion_main!(benches); | ||||
| @@ -26,34 +26,6 @@ pub struct Conf<'a> { | ||||
| impl Conf<'_> { | ||||
|     fn nop(_builder: &mut Settings) {} | ||||
|  | ||||
|     fn songs_conf(builder: &mut Settings) { | ||||
|         let displayed_fields = [ | ||||
|             "id", "title", "album", "artist", "genre", "country", "released", "duration", | ||||
|         ] | ||||
|         .iter() | ||||
|         .map(|s| s.to_string()) | ||||
|         .collect(); | ||||
|         builder.set_displayed_fields(displayed_fields); | ||||
|  | ||||
|         let searchable_fields = ["title", "album", "artist"] | ||||
|             .iter() | ||||
|             .map(|s| s.to_string()) | ||||
|             .collect(); | ||||
|         builder.set_searchable_fields(searchable_fields); | ||||
|  | ||||
|         let faceted_fields = [ | ||||
|             ("released-timestamp", "integer"), | ||||
|             ("duration-float", "float"), | ||||
|             ("genre", "string"), | ||||
|             ("country", "string"), | ||||
|             ("artist", "string"), | ||||
|         ] | ||||
|         .iter() | ||||
|         .map(|(a, b)| (a.to_string(), b.to_string())) | ||||
|         .collect(); | ||||
|         builder.set_faceted_fields(faceted_fields); | ||||
|     } | ||||
|  | ||||
|     pub const BASE: Self = Conf { | ||||
|         database_name: "benches.mmdb", | ||||
|         dataset: "", | ||||
| @@ -65,11 +37,6 @@ impl Conf<'_> { | ||||
|         optional_words: true, | ||||
|     }; | ||||
|  | ||||
|     pub const BASE_SONGS: Self = Conf { | ||||
|         dataset: "smol-songs.csv", | ||||
|         configure: Self::songs_conf, | ||||
|         ..Self::BASE | ||||
|     }; | ||||
| } | ||||
|  | ||||
| pub fn base_setup(conf: &Conf) -> Index { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user