You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

merge.rs 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. //extern crate tantivy;
  2. use clap::ArgMatches;
  3. //use futures::Future;
  4. use std::path::PathBuf;
  5. use tantivy::{Index, SegmentMeta};
  6. const HEAP_SIZE: usize = 300_000_000;
  7. fn error_msg(err: tantivy::TantivyError) -> String {
  8. format!("Merge failed : {:?}", err)
  9. }
  10. pub fn run_merge_cli(argmatch: &ArgMatches) -> Result<(), String> {
  11. let index_directory = PathBuf::from(argmatch.value_of("index").unwrap());
  12. run_merge(index_directory).map_err(error_msg)
  13. // we rollback to force a gc.
  14. }
  15. fn run_merge(path: PathBuf) -> tantivy::Result<()> {
  16. let index = Index::open_in_dir(&path)?;
  17. let segments = index.searchable_segment_ids()?;
  18. let segment_meta: SegmentMeta =
  19. super::run(
  20. index
  21. .writer(HEAP_SIZE)?
  22. .merge(&segments)
  23. ).expect("Merge failed");
  24. //.map_err(|_| tantivy::Error::ErrorInThread(String::from("Merge got cancelled")));
  25. println!("Merge finished with segment meta {:?}", segment_meta);
  26. println!("Garbage collect irrelevant segments.");
  27. let gc_fut = Index::open_in_dir(&path)?
  28. .writer_with_num_threads(1, 40_000_000)?
  29. .garbage_collect_files();
  30. super::run(gc_fut)?;
  31. Ok(())
  32. }