feat: Make a more debug oriented search tool

This commit is contained in:
Kerollmops
2018-06-24 19:27:24 +02:00
committed by Clément Renault
parent b406fb4aed
commit 79d8555620
3 changed files with 69 additions and 14 deletions

View File

@ -1,22 +1,16 @@
extern crate env_logger;
extern crate fst;
extern crate raptor;
extern crate elapsed;
use std::env;
use std::{env, fs};
use std::process::Command;
use std::io::{self, Write};
use elapsed::measure_time;
use fst::Streamer;
use raptor::{load_map, RankedStream, LevBuilder};
fn main() {
drop(env_logger::init());
let lev_builder = LevBuilder::new();
let map = load_map("map.fst", "values.vecs").unwrap();
let query = env::args().nth(1).expect("Please enter query words!");
let query = query.to_lowercase();
println!("Searching for: {:?}", query);
use raptor::{load_map, DocIndexMap, RankedStream, LevBuilder};
fn search(map: &DocIndexMap, lev_builder: &LevBuilder, query: &str) {
let mut automatons = Vec::new();
for query in query.split_whitespace() {
let lev = lev_builder.build_automaton(query);
@ -26,6 +20,59 @@ fn main() {
let limit: Option<usize> = env::var("RAPTOR_OUTPUT_LIMIT").ok().and_then(|x| x.parse().ok());
let mut stream = RankedStream::new(&map, map.values(), automatons, limit.unwrap_or(20));
while let Some(document_id) = stream.next() {
println!("{:?}", document_id);
print!("{:?}", document_id);
/* only here to debug !
if let Ok(_) = fs::File::open("products.json_lines") {
let output = Command::new("rg")
.arg(document_id.to_string())
.arg("products.json_lines")
.output();
if let Ok(Ok(output)) = output.map(|o| String::from_utf8(o.stdout)) {
if let Some(line) = output.lines().next() {
let pattern = "\"title\":";
if let Some(index) = line.find(pattern) {
let line: String = line[index..].chars().skip(pattern.len()).take(100).collect();
print!(" => {}", line);
}
}
}
}
// */
println!();
}
}
fn main() {
drop(env_logger::init());
let (elapsed, (lev_builder, map)) = measure_time(|| {
let lev_builder = LevBuilder::new();
let map = load_map("map.fst", "values.vecs").unwrap();
(lev_builder, map)
});
println!("Loaded in {}", elapsed);
match env::args().nth(1) {
Some(query) => {
println!("Searching for: {:?}", query);
let query = query.to_lowercase();
let (elapsed, _) = measure_time(|| search(&map, &lev_builder, &query));
println!("Finished in {}", elapsed);
},
None => loop {
print!("Searching for: ");
io::stdout().flush().unwrap();
let mut query = String::new();
io::stdin().read_line(&mut query).unwrap();
let query = query.trim().to_lowercase();
if query.is_empty() { break }
let (elapsed, _) = measure_time(|| search(&map, &lev_builder, &query));
println!("Finished in {}", elapsed);
},
}
}