add a bunch of queries and start the introduction of the filters and the new dataset

This commit is contained in:
tamo 2021-04-13 10:44:27 +02:00 committed by Tamo
parent 3def42abd8
commit ea0c6d8c40
No known key found for this signature in database
GPG key ID: 20CD8020AFA88D69
3 changed files with 132 additions and 10 deletions

View file

@ -1,18 +1,40 @@
use std::{fs::{File, create_dir_all}, time::Duration};
use std::{fs::{File, create_dir_all, remove_dir_all}, time::Duration};
use heed::EnvOpenOptions;
use criterion::BenchmarkId;
use milli::{Index, update::{IndexDocumentsMethod, UpdateBuilder, UpdateFormat}};
use milli::{FacetCondition, Index, update::{IndexDocumentsMethod, UpdateBuilder, UpdateFormat}};
pub struct Conf<'a> {
/// where we are going to create our database.mmdb directory
/// each benchmark will first try to delete it and then recreate it
pub database_name: &'a str,
/// the dataset to be used, it must be an uncompressed csv
pub dataset: &'a str,
pub group_name: &'a str,
pub queries: &'a[&'a str],
pub criterion: Option<&'a [&'a str]>,
pub facet_condition: Option<FacetCondition>,
pub optional_words: bool,
}
pub fn base_setup(criterion: Option<Vec<String>>) -> Index {
let database = "songs.mmdb";
impl Conf<'_> {
pub const BASE: Self = Conf {
database_name: "benches.mmdb",
dataset: "",
group_name: "",
queries: &[],
criterion: None,
facet_condition: None,
optional_words: true,
};
}
pub fn base_setup(database: &str, dataset: &str, criterion: Option<Vec<String>>) -> Index {
match remove_dir_all(&database) {
Ok(_) => (),
Err(e) if e.kind() == std::io::ErrorKind::NotFound => (),
Err(e) => panic!("{}", e),
}
create_dir_all(&database).unwrap();
let mut options = EnvOpenOptions::new();
@ -41,7 +63,7 @@ pub fn base_setup(criterion: Option<Vec<String>>) -> Index {
builder.update_format(UpdateFormat::Csv);
builder.index_documents_method(IndexDocumentsMethod::ReplaceDocuments);
// we called from cargo the current directory is supposed to be milli/milli
let reader = File::open("benches/smol_songs.csv").unwrap();
let reader = File::open(dataset).unwrap();
builder.execute(reader, |_, _| ()).unwrap();
wtxn.commit().unwrap();
@ -51,16 +73,21 @@ pub fn base_setup(criterion: Option<Vec<String>>) -> Index {
pub fn run_benches(c: &mut criterion::Criterion, confs: &[Conf]) {
for conf in confs {
let criterion = conf.criterion.map(|s| s.iter().map(|s| s.to_string()).collect());
let index = base_setup(criterion);
let index = base_setup(conf.database_name, conf.dataset, criterion);
let mut group = c.benchmark_group(conf.group_name);
let mut group = c.benchmark_group(&format!("{}: {}", conf.dataset, conf.group_name));
group.measurement_time(Duration::from_secs(10));
for &query in conf.queries {
group.bench_with_input(BenchmarkId::from_parameter(query), &query, |b, &query| {
b.iter(|| {
let rtxn = index.read_txn().unwrap();
let _documents_ids = index.search(&rtxn).query(query).optional_words(conf.optional_words).execute().unwrap();
let mut search = index.search(&rtxn);
search.query(query).optional_words(conf.optional_words);
if let Some(facet_condition) = conf.facet_condition.clone() {
search.facet_condition(facet_condition);
}
let _ids = search.execute().unwrap();
});
});
}