tag_index 0.8.0

tag_index provides a searchable index over key-value tags
Documentation
use std::fs::File;
use std::io::{BufRead, BufReader};

use tag_index::{CompressedTagIndex, Tag, TagIndex, Tags};

fn parse_queries(queries: &str) -> Vec<Tag> {
    let reader = BufReader::new(File::open(queries).unwrap());
    let mut queries = vec![];
    for line in reader.lines() {
        let line = line.unwrap();
        queries.extend(Tags::new(&line).unwrap().tags().map(Tag::into_owned));
    }
    queries
}

fn main() {
    let args: Vec<String> = std::env::args().collect();
    let args: Vec<&str> = args.iter().map(AsRef::as_ref).collect();
    if args.len() != 3 {
        eprintln!("USAGE: benchmark-inverted-tag-index tagfile queries");
        std::process::exit(129);
    }
    let cti = CompressedTagIndex::open(args[1]).unwrap();
    let queries = parse_queries(args[2]);
    let queries_len = queries.len();
    let mut count = 0;
    let start = std::time::Instant::now();
    for (idx, query) in queries.into_iter().enumerate() {
        let tagses = cti.search(&[query]).unwrap();
        count += tagses.len();
        println!("{}% done", idx);
    }
    let elapsed = start.elapsed();
    println!(
        "performed {} queries in {:?} and fetched {} tags",
        queries_len, elapsed, count
    );
}