@@ -397,6 +397,7 @@ mod bench {
397
397
use super :: * ;
398
398
use crate :: directory:: { CompositeFile , Directory , RamDirectory , WritePtr } ;
399
399
use crate :: fastfield:: { CompositeFastFieldSerializer , FastFieldsWriter } ;
400
+ use crate :: indexer:: doc_id_mapping:: DocIdMapping ;
400
401
use crate :: schema:: { Cardinality , NumericOptions , Schema } ;
401
402
use crate :: Document ;
402
403
@@ -499,4 +500,37 @@ mod bench {
499
500
serializer. close ( ) . unwrap ( ) ;
500
501
} ) ;
501
502
}
503
+
504
+ #[ bench]
505
+ fn bench_multi_value_ff_creation_with_sorting ( b : & mut Bencher ) {
506
+ // 3 million ff entries
507
+ let num_docs = 1_000_000 ;
508
+ let multi_values = multi_values ( num_docs, 3 ) ;
509
+
510
+ let doc_id_mapping =
511
+ DocIdMapping :: from_new_id_to_old_id ( ( 0 ..1_000_000 ) . collect :: < Vec < _ > > ( ) ) ;
512
+
513
+ b. iter ( || {
514
+ let directory: RamDirectory = RamDirectory :: create ( ) ;
515
+ let options = NumericOptions :: default ( ) . set_fast ( Cardinality :: MultiValues ) ;
516
+ let mut schema_builder = Schema :: builder ( ) ;
517
+ let field = schema_builder. add_u64_field ( "field" , options) ;
518
+ let schema = schema_builder. build ( ) ;
519
+
520
+ let write: WritePtr = directory. open_write ( Path :: new ( "test" ) ) . unwrap ( ) ;
521
+ let mut serializer = CompositeFastFieldSerializer :: from_write ( write) . unwrap ( ) ;
522
+ let mut fast_field_writers = FastFieldsWriter :: from_schema ( & schema) ;
523
+ for block in & multi_values {
524
+ let mut doc = Document :: new ( ) ;
525
+ for val in block {
526
+ doc. add_u64 ( field, * val) ;
527
+ }
528
+ fast_field_writers. add_document ( & doc) ;
529
+ }
530
+ fast_field_writers
531
+ . serialize ( & mut serializer, & HashMap :: new ( ) , Some ( & doc_id_mapping) )
532
+ . unwrap ( ) ;
533
+ serializer. close ( ) . unwrap ( ) ;
534
+ } ) ;
535
+ }
502
536
}
0 commit comments