use super::HmsCore;
use crate::core::entangled::EntangledHVec;
use crate::core::types::RetrievalResult;
use rayon::prelude::*;
impl HmsCore {
pub fn query(&self, query_vec: &EntangledHVec, k: u32) -> Vec<RetrievalResult> {
self.shards.read().query(query_vec, k, self.dimensions)
}
pub fn query_batch(&self, queries: &[EntangledHVec], k: u32) -> Vec<Vec<RetrievalResult>> {
queries.par_iter().map(|q| self.query(q, k)).collect()
}
pub fn analyze_components(&self, vector: &EntangledHVec) -> Vec<RetrievalResult> {
let cfg = &self.config.query;
let neighbors = self.query(vector, cfg.component_max_neighbors);
neighbors
.into_iter()
.filter(|r| r.similarity > cfg.component_similarity_threshold)
.collect()
}
}