pub struct MetadataStore {
entries: Vec<HashMap<String, String>>,
inverted: HashMap<String, HashMap<String, RoaringBitmap>>,
}Expand description
Dense metadata store with inverted index for O(1) pre-filtering.
Two data structures:
entries: node_id → metadata map (for retrieval)inverted: key → value → RoaringBitmap of node_ids (for filtering)
The inverted index supports exact-match pre-filtering during HNSW traversal, replacing the O(4k) post-filter with O(1) bitmap lookups.
Fields§
§entries: Vec<HashMap<String, String>>node_id → metadata. Empty HashMap for nodes without metadata.
inverted: HashMap<String, HashMap<String, RoaringBitmap>>Inverted index: key → value → bitmap of matching node_ids. Only populated for exact string values (not numeric ranges).
Implementations§
Source§impl MetadataStore
impl MetadataStore
Sourcepub fn push(&mut self, metadata: HashMap<String, String>)
pub fn push(&mut self, metadata: HashMap<String, String>)
Register metadata for a new node (must be called in order).
Sourcepub fn push_empty(&mut self)
pub fn push_empty(&mut self)
Register an empty metadata entry.
Sourcepub fn matches(&self, node_id: u32, filter: &MetadataFilter) -> bool
pub fn matches(&self, node_id: u32, filter: &MetadataFilter) -> bool
Check if a node passes a metadata filter.
Sourcepub fn build_filter_bitmap(&self, filter: &MetadataFilter) -> RoaringBitmap
pub fn build_filter_bitmap(&self, filter: &MetadataFilter) -> RoaringBitmap
Build a RoaringBitmap of node_ids matching the metadata filter.
For Equals predicates: uses the inverted index for O(1) lookup.
For other predicates (Gte, Lte, Contains, Exists): falls back to
scanning entries.
Multiple predicates are AND-combined (intersection).
Sourcepub fn filter_results(
&self,
results: &[(u32, f32)],
filter: &MetadataFilter,
) -> Vec<(u32, f32)>
pub fn filter_results( &self, results: &[(u32, f32)], filter: &MetadataFilter, ) -> Vec<(u32, f32)>
Filter a list of (node_id, score) results by metadata.
Trait Implementations§
Source§impl Clone for MetadataStore
impl Clone for MetadataStore
Source§fn clone(&self) -> MetadataStore
fn clone(&self) -> MetadataStore
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MetadataStore
impl Debug for MetadataStore
Source§impl Default for MetadataStore
impl Default for MetadataStore
Source§fn default() -> MetadataStore
fn default() -> MetadataStore
Source§impl<'de> Deserialize<'de> for MetadataStore
impl<'de> Deserialize<'de> for MetadataStore
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for MetadataStore
impl RefUnwindSafe for MetadataStore
impl Send for MetadataStore
impl Sync for MetadataStore
impl Unpin for MetadataStore
impl UnwindSafe for MetadataStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more