pub struct GroupBy {
pub keys: Vec<Key>,
pub aggregate: Option<Aggregate>,
}Expand description
Groups results by metadata keys and aggregates within each group.
Results are grouped by the specified metadata keys (like SQL GROUP BY), then aggregated within each group using MinK or MaxK ordering. The final output is flattened and sorted by score.
§Fields
keys- Metadata keys to group by (composite grouping)aggregate- Aggregation function to apply within each group
§Behavior
- Missing metadata keys are treated as Null (forming their own group)
- Empty groups are omitted from results
- Final output is flattened (group structure not preserved)
- Results are sorted by score after aggregation
§Examples
use chroma_types::operator::{GroupBy, Aggregate, Key};
// Top 3 documents per category
let group_by = GroupBy {
keys: vec![Key::field("category")],
aggregate: Some(Aggregate::MinK {
keys: vec![Key::Score],
k: 3,
}),
};
// Top 2 per (category, author) combination
let group_by = GroupBy {
keys: vec![Key::field("category"), Key::field("author")],
aggregate: Some(Aggregate::MinK {
keys: vec![Key::Score, Key::field("date")],
k: 2,
}),
};Fields§
§keys: Vec<Key>Metadata keys to group by
aggregate: Option<Aggregate>Aggregation to apply within each group (required when keys is non-empty)
Trait Implementations§
Source§impl<'de> Deserialize<'de> for GroupBy
impl<'de> Deserialize<'de> for GroupBy
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>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl TryFrom<GroupBy> for GroupByOperator
impl TryFrom<GroupBy> for GroupByOperator
Source§impl TryFrom<GroupByOperator> for GroupBy
impl TryFrom<GroupByOperator> for GroupBy
Source§type Error = QueryConversionError
type Error = QueryConversionError
The type returned in the event of a conversion error.
Auto Trait Implementations§
impl Freeze for GroupBy
impl RefUnwindSafe for GroupBy
impl Send for GroupBy
impl Sync for GroupBy
impl Unpin for GroupBy
impl UnwindSafe for GroupBy
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)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>
Converts
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>
Converts
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§unsafe fn to_subset_unchecked(&self) -> SS
unsafe fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.