Skip to main content

holographic_memory/core/engine/
query.rs

1// Copyright 2024-2026 WritersLogic Contributors
2// SPDX-License-Identifier: Apache-2.0
3
4use super::HmsCore;
5use crate::core::entangled::EntangledHVec;
6use crate::core::types::RetrievalResult;
7use rayon::prelude::*;
8
9impl HmsCore {
10    /// Query the memory system for the k most similar vectors.
11    pub fn query(&self, query_vec: &EntangledHVec, k: u32) -> Vec<RetrievalResult> {
12        self.shards.read().query(query_vec, k, self.dimensions)
13    }
14
15    /// Process multiple queries in parallel using rayon.
16    pub fn query_batch(&self, queries: &[EntangledHVec], k: u32) -> Vec<Vec<RetrievalResult>> {
17        queries.par_iter().map(|q| self.query(q, k)).collect()
18    }
19
20    /// Analyze components of a vector by finding its nearest neighbors.
21    /// Filters by similarity threshold from QueryConfig (default 0.05).
22    pub fn analyze_components(&self, vector: &EntangledHVec) -> Vec<RetrievalResult> {
23        let cfg = &self.config.query;
24        let neighbors = self.query(vector, cfg.component_max_neighbors);
25        neighbors
26            .into_iter()
27            .filter(|r| r.similarity > cfg.component_similarity_threshold)
28            .collect()
29    }
30}