mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-05-18 01:00:40 +00:00
* Split Collector into an overall Collector and a per-segment SegmentCollector. Precursor to cross-segment parallelism, and as a side benefit cleans up any per-segment fields from being Option<T> to just T. * Attempt to add MultiCollector back * working. Chained collector is broken though * Fix chained collector * Fix test * Make Weight Send+Sync for parallelization purposes * Expose parameters of RangeQuery for external usage * Removed &mut self * fixing tests * Restored TestCollectors * blop * multicollector working * chained collector working * test broken * fixing unit test * blop * blop * Blop * simplifying APi * blop * better syntax * Simplifying top_collector * refactoring * blop * Sync with master * Added multithread search * Collector refactoring * Schema::builder * CR and rustdoc * CR comments * blop * Added an executor * Sorted the segment readers in the searcher * Update searcher.rs * Fixed unit testst * changed the place where we have the sort-segment-by-count heuristic * using crossbeam::channel * inlining * Comments about panics propagating * Added unit test for executor panicking * Readded default * Removed Default impl * Added unit test for executor
59 lines
1.9 KiB
Rust
59 lines
1.9 KiB
Rust
use rand::thread_rng;
|
|
use std::collections::HashSet;
|
|
|
|
use rand::Rng;
|
|
use schema::*;
|
|
use Index;
|
|
use Searcher;
|
|
|
|
fn check_index_content(searcher: &Searcher, vals: &HashSet<u64>) {
|
|
assert!(searcher.segment_readers().len() < 20);
|
|
assert_eq!(searcher.num_docs() as usize, vals.len());
|
|
}
|
|
|
|
#[test]
|
|
#[ignore]
|
|
#[cfg(feature = "mmap")]
|
|
fn test_indexing() {
|
|
let mut schema_builder = Schema::builder();
|
|
|
|
let id_field = schema_builder.add_u64_field("id", INT_INDEXED);
|
|
let multiples_field = schema_builder.add_u64_field("multiples", INT_INDEXED);
|
|
let schema = schema_builder.build();
|
|
|
|
let index = Index::create_from_tempdir(schema).unwrap();
|
|
|
|
let mut rng = thread_rng();
|
|
|
|
let mut index_writer = index.writer_with_num_threads(3, 120_000_000).unwrap();
|
|
|
|
let mut committed_docs: HashSet<u64> = HashSet::new();
|
|
let mut uncommitted_docs: HashSet<u64> = HashSet::new();
|
|
|
|
for _ in 0..200 {
|
|
let random_val = rng.gen_range(0, 20);
|
|
if random_val == 0 {
|
|
index_writer.commit().expect("Commit failed");
|
|
committed_docs.extend(&uncommitted_docs);
|
|
uncommitted_docs.clear();
|
|
index.load_searchers().unwrap();
|
|
let searcher = index.searcher();
|
|
// check that everything is correct.
|
|
check_index_content(&searcher, &committed_docs);
|
|
} else {
|
|
if committed_docs.remove(&random_val) || uncommitted_docs.remove(&random_val) {
|
|
let doc_id_term = Term::from_field_u64(id_field, random_val);
|
|
index_writer.delete_term(doc_id_term);
|
|
} else {
|
|
uncommitted_docs.insert(random_val);
|
|
let mut doc = Document::new();
|
|
doc.add_u64(id_field, random_val);
|
|
for i in 1u64..10u64 {
|
|
doc.add_u64(multiples_field, random_val * i);
|
|
}
|
|
index_writer.add_document(doc);
|
|
}
|
|
}
|
|
}
|
|
}
|