Skip to main content

weavatrix_search_vector/
metadata_search.rs

1use crate::error::SearchError;
2use crate::hit::SearchHit;
3use crate::hnsw::VectorIndex;
4use crate::metadata::{MetadataFilter, MetadataIndex};
5use crate::storage::MappedVectorIndex;
6
7impl MetadataIndex {
8    /// Searches an owned index and guarantees enough filtered hits through the
9    /// index's exact fallback.
10    ///
11    /// # Errors
12    ///
13    /// Returns a typed query or allocation error.
14    pub fn search(
15        &self,
16        index: &VectorIndex,
17        query: &[f32],
18        count: usize,
19        filter: &MetadataFilter,
20    ) -> Result<Vec<SearchHit>, SearchError> {
21        index.search_filtered(query, count, |key| self.matches(key, filter))
22    }
23
24    /// Searches a memory-mapped index with the same filter semantics.
25    ///
26    /// # Errors
27    ///
28    /// Returns a typed query or allocation error.
29    pub fn search_mapped(
30        &self,
31        index: &MappedVectorIndex,
32        query: &[f32],
33        count: usize,
34        filter: &MetadataFilter,
35    ) -> Result<Vec<SearchHit>, SearchError> {
36        index.search_filtered(query, count, |key| self.matches(key, filter))
37    }
38}