pub fn search(
store: &Store,
query: &str,
current_repo_id: Option<i64>,
only_repo: Option<i64>,
active: &ActiveFiles,
limit: usize,
) -> Result<Vec<Hit>>Expand description
Search the index for query, returning up to limit ranked hits.
current_repo_id (if any) boosts results from the repository you’re in;
only_repo (if any) restricts results to that repository, so a search inside
a repo answers about that repo rather than leaking others you’ve indexed;
active boosts files you’re changing on the current branch.
Examples found in repository?
examples/bench.rs (line 43)
29fn main() {
30 let root = PathBuf::from(std::env::args().nth(1).unwrap_or_else(|| ".".into()));
31
32 let mut store = Store::open_in_memory().expect("open store");
33 let stats = index::index_path(&mut store, &root).expect("index");
34 println!(
35 "indexed {} symbols from {} file(s) under {}",
36 stats.symbols,
37 stats.files_indexed,
38 root.display()
39 );
40
41 // warm up
42 for q in QUERIES {
43 let _ = search::search(&store, q, None, None, &search::ActiveFiles::default(), 10);
44 }
45
46 let mut times_us: Vec<u128> = Vec::new();
47 for _ in 0..200 {
48 for q in QUERIES {
49 let start = Instant::now();
50 let _ = search::search(&store, q, None, None, &search::ActiveFiles::default(), 10)
51 .expect("search");
52 times_us.push(start.elapsed().as_micros());
53 }
54 }
55 times_us.sort_unstable();
56
57 let pct = |p: f64| times_us[((times_us.len() as f64 - 1.0) * p).round() as usize];
58 println!(
59 "search over {} runs: p50 {} µs p95 {} µs max {} µs",
60 times_us.len(),
61 pct(0.50),
62 pct(0.95),
63 times_us[times_us.len() - 1],
64 );
65 let budget_us = 50_000;
66 let over = times_us.iter().filter(|&&t| t > budget_us).count();
67 println!("{}/{} runs exceeded the 50 ms budget", over, times_us.len());
68}