use crate::types::HitResult;
use std::collections::hash_map::Entry;
use std::collections::HashMap;
pub fn filter_best_hits(hits: Vec<HitResult>) -> Vec<HitResult> {
let estimated_queries = (hits.len() / 2).max(1);
let mut best_by_query: HashMap<i64, HitResult> = HashMap::with_capacity(estimated_queries);
for hit in hits {
match best_by_query.entry(hit.query_id) {
Entry::Occupied(mut entry) => {
if hit.score > entry.get().score {
entry.insert(hit);
}
}
Entry::Vacant(entry) => {
entry.insert(hit);
}
}
}
best_by_query.into_values().collect()
}