pub struct StorageCapabilities {
pub bi_temporal_native: bool,
pub graph_native: bool,
pub rerank_native: bool,
pub queue_native: bool,
pub max_vector_dim: u32,
pub native_rrf: bool,
pub max_scopes_recommended: usize,
pub cypher_dialect: CypherDialect,
pub graph_decay_native: bool,
pub graph_navigate_native: bool,
}Fields§
§bi_temporal_native: booltrue only when KV reads support historical AS_OF natively.
Moon supports temporal graph and FT surfaces, but its hash/KV HGET
path currently returns latest state for Lunaris KV rows, so Moon
reports false and read_as_of refuses a historical pin with
NotSupported rather than silently answering with current state.
graph_native: booltrue for Moon (CSR + Cypher).
rerank_native: booltrue for Moon’s bundled cross-encoder.
queue_native: booltrue for Moon (MQ.*).
max_vector_dim: u32Maximum vector dimension the backend’s index can hold. Moon reports the dimension its FT indices were actually created at (768 by default).
native_rrf: booltrue when the backend can run RRF (Reciprocal Rank Fusion) over
(vector, sparse_bm25) natively in a single round trip — i.e., Moon’s
FT.SEARCH ... HYBRID VECTOR ... SPARSE ... FUSION RRF WEIGHTS ... exposed
via client.text().hybrid_search(). Phase 2’s fuse_rrf operator opts into
RrfFusion::Moon when both branches hit a backend with native_rrf=true AND
both branches are Vector / Keyword(BM25) operators on the same Moon index.
Backends with native_rrf=false fall back to client-side fusion
(RrfFusion::Client), which is always correct if slower.
max_scopes_recommended: usizeRecommended upper bound on active scopes for this backend.
Moon creates one FT index + one graph key + N MQ topics per scope.
Moon’s soft limit is ~512 FT indices per node before recall p99 degrades
(per Moon docs §6.4 “index count”). Above max_scopes_recommended the
operator should consider workspace-level pooling (future RFC). A value of
0 means no limit is documented — a backend with no per-scope index
multiplier.
RFC 0001 §3.6: set to 512 for Moon.
cypher_dialect: CypherDialectCypher dialect tier the backend’s graph executor accepts.
Defaults to CypherDialect::Legacy — the universally-supported
pre-Wave-4 template. Backends opt into Full only with
primary-source dialect verification; Moon stays at Legacy (the
Wave 4 probe rejected MATCH p = ...).
See CypherDialect for the full tier matrix.
graph_decay_native: booltrue when the backend’s graph executor supports native recency-decay
traversal — i.e., Moon’s GRAPH.QUERY ... --decay <λ> [--time-weight <w>]
read-path clause (effective edge cost |weight| + λ·w·age_seconds).
Callers gate StoragePort::graph_traverse_decayed(decay: Some(_)) on
this flag; the default trait impl returns NotSupported. true for
Moon (v0.3.0+). #[serde(default)] keeps pre-v0.7 serialized
capability payloads parseable (missing field → false).
true when the backend supports graph-expanded vector retrieval —
i.e., Moon’s FT.NAVIGATE (KNN seeds → bounded BFS → hop-aware
re-rank). Callers gate StoragePort::vector_navigate on this flag;
the DSL Navigate operator degrades to plain vector_search when
false. true for Moon (v0.3.0+). #[serde(default)] keeps older
serialized payloads parseable.
Trait Implementations§
Source§impl Clone for StorageCapabilities
impl Clone for StorageCapabilities
Source§fn clone(&self) -> StorageCapabilities
fn clone(&self) -> StorageCapabilities
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for StorageCapabilities
Source§impl Debug for StorageCapabilities
impl Debug for StorageCapabilities
Source§impl<'de> Deserialize<'de> for StorageCapabilities
impl<'de> Deserialize<'de> for StorageCapabilities
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<StorageCapabilities, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<StorageCapabilities, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
impl Eq for StorageCapabilities
Source§impl PartialEq for StorageCapabilities
impl PartialEq for StorageCapabilities
Source§impl Serialize for StorageCapabilities
impl Serialize for StorageCapabilities
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for StorageCapabilities
Auto Trait Implementations§
impl Freeze for StorageCapabilities
impl RefUnwindSafe for StorageCapabilities
impl Send for StorageCapabilities
impl Sync for StorageCapabilities
impl Unpin for StorageCapabilities
impl UnsafeUnpin for StorageCapabilities
impl UnwindSafe for StorageCapabilities
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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