//extern crate tantivy; use clap::ArgMatches; //use futures::Future; use std::path::PathBuf; use tantivy::{Index, SegmentMeta}; const HEAP_SIZE: usize = 300_000_000; fn error_msg(err: tantivy::TantivyError) -> String { format!("Merge failed : {:?}", err) } pub fn run_merge_cli(argmatch: &ArgMatches) -> Result<(), String> { let index_directory = PathBuf::from(argmatch.value_of("index").unwrap()); run_merge(index_directory).map_err(error_msg) // we rollback to force a gc. } fn run_merge(path: PathBuf) -> tantivy::Result<()> { let index = Index::open_in_dir(&path)?; let segments = index.searchable_segment_ids()?; let segment_meta: SegmentMeta = super::run( index .writer(HEAP_SIZE)? .merge(&segments) ).expect("Merge failed"); //.map_err(|_| tantivy::Error::ErrorInThread(String::from("Merge got cancelled"))); println!("Merge finished with segment meta {:?}", segment_meta); println!("Garbage collect irrelevant segments."); let gc_fut = Index::open_in_dir(&path)? .writer_with_num_threads(1, 40_000_000)? .garbage_collect_files(); super::run(gc_fut)?; Ok(()) }