Skip to content

Commit bf3327a

Browse files
committed
add benchmark for multivalue fast field
1 parent 2a6479b commit bf3327a

File tree

1 file changed

+84
-0
lines changed
  • src/fastfield/multivalued

1 file changed

+84
-0
lines changed

src/fastfield/multivalued/mod.rs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,3 +386,87 @@ mod tests {
386386
Ok(())
387387
}
388388
}
389+
390+
#[cfg(all(test, feature = "unstable"))]
391+
mod bench {
392+
use std::collections::HashMap;
393+
use std::path::Path;
394+
395+
use test::{self, Bencher};
396+
397+
use super::*;
398+
use crate::directory::{CompositeFile, Directory, RamDirectory, WritePtr};
399+
use crate::fastfield::{CompositeFastFieldSerializer, FastFieldsWriter};
400+
use crate::schema::{Cardinality, NumericOptions, Schema};
401+
use crate::Document;
402+
403+
fn multi_values(num_docs: usize, vals_per_doc: usize) -> Vec<Vec<u64>> {
404+
let mut vals = vec![];
405+
for _i in 0..num_docs {
406+
let mut block = vec![];
407+
for j in 0..vals_per_doc {
408+
block.push(j as u64);
409+
}
410+
vals.push(block);
411+
}
412+
413+
vals
414+
}
415+
416+
#[bench]
417+
fn bench_multi_value_fflookup(b: &mut Bencher) {
418+
let num_docs = 100_000;
419+
420+
let path = Path::new("test");
421+
let directory: RamDirectory = RamDirectory::create();
422+
let field = {
423+
let options = NumericOptions::default().set_fast(Cardinality::MultiValues);
424+
let mut schema_builder = Schema::builder();
425+
let field = schema_builder.add_u64_field("field", options);
426+
let schema = schema_builder.build();
427+
428+
let write: WritePtr = directory.open_write(Path::new("test")).unwrap();
429+
let mut serializer = CompositeFastFieldSerializer::from_write(write).unwrap();
430+
let mut fast_field_writers = FastFieldsWriter::from_schema(&schema);
431+
for block in &multi_values(num_docs, 1) {
432+
let mut doc = Document::new();
433+
for val in block {
434+
doc.add_u64(field, *val);
435+
}
436+
fast_field_writers.add_document(&doc);
437+
}
438+
fast_field_writers
439+
.serialize(&mut serializer, &HashMap::new(), None)
440+
.unwrap();
441+
serializer.close().unwrap();
442+
field
443+
};
444+
let file = directory.open_read(&path).unwrap();
445+
{
446+
let fast_fields_composite = CompositeFile::open(&file).unwrap();
447+
let data_idx = fast_fields_composite
448+
.open_read_with_idx(field, 0)
449+
.unwrap()
450+
.read_bytes()
451+
.unwrap();
452+
let idx_reader = fastfield_codecs::open(data_idx).unwrap();
453+
454+
let data_vals = fast_fields_composite
455+
.open_read_with_idx(field, 1)
456+
.unwrap()
457+
.read_bytes()
458+
.unwrap();
459+
let vals_reader = fastfield_codecs::open(data_vals).unwrap();
460+
let fast_field_reader = MultiValuedFastFieldReader::open(idx_reader, vals_reader);
461+
b.iter(|| {
462+
let mut sum = 0u64;
463+
for i in 0u32..num_docs as u32 {
464+
let mut data = vec![];
465+
fast_field_reader.get_vals(i, &mut data);
466+
sum += data.iter().sum::<u64>();
467+
}
468+
sum
469+
});
470+
}
471+
}
472+
}

0 commit comments

Comments
 (0)