pub struct SearchPayload {
pub filter: Filter,
pub rank: Rank,
pub limit: Limit,
pub select: Select,
}Expand description
A search payload for the hybrid search API.
Combines filtering, ranking, pagination, and field selection into a single query. Use the builder methods to construct complex searches with a fluent interface.
§Examples
§Basic vector search
use chroma_types::plan::SearchPayload;
use chroma_types::operator::{RankExpr, QueryVector, Key};
let search = SearchPayload::default()
.rank(RankExpr::Knn {
query: QueryVector::Dense(vec![0.1, 0.2, 0.3]),
key: Key::Embedding,
limit: 100,
default: None,
return_rank: false,
})
.limit(Some(10), 0)
.select([Key::Document, Key::Score]);§Filtered search
use chroma_types::plan::SearchPayload;
use chroma_types::operator::{RankExpr, QueryVector, Key};
let search = SearchPayload::default()
.r#where(
Key::field("status").eq("published")
& Key::field("year").gte(2020)
)
.rank(RankExpr::Knn {
query: QueryVector::Dense(vec![0.1, 0.2, 0.3]),
key: Key::Embedding,
limit: 200,
default: None,
return_rank: false,
})
.limit(Some(5), 0)
.select([Key::Document, Key::Score, Key::field("title")]);§Hybrid search with custom ranking
use chroma_types::plan::SearchPayload;
use chroma_types::operator::{RankExpr, QueryVector, Key};
let dense = RankExpr::Knn {
query: QueryVector::Dense(vec![0.1, 0.2, 0.3]),
key: Key::Embedding,
limit: 200,
default: None,
return_rank: false,
};
let sparse = RankExpr::Knn {
query: QueryVector::Dense(vec![0.1, 0.2, 0.3]),
key: Key::field("sparse_embedding"),
limit: 200,
default: None,
return_rank: false,
};
let search = SearchPayload::default()
.rank(dense * 0.7 + sparse * 0.3)
.limit(Some(10), 0)
.select([Key::Document, Key::Score]);Fields§
§filter: Filter§rank: Rank§limit: Limit§select: SelectImplementations§
Source§impl SearchPayload
impl SearchPayload
Sourcepub fn limit(self, limit: Option<u32>, offset: u32) -> Self
pub fn limit(self, limit: Option<u32>, offset: u32) -> Self
Sets pagination parameters.
§Arguments
limit- Maximum number of results to return (None = no limit)offset- Number of results to skip
§Examples
use chroma_types::plan::SearchPayload;
// First page: results 0-9
let search = SearchPayload::default().limit(Some(10), 0);
// Second page: results 10-19
let search = SearchPayload::default().limit(Some(10), 10);Sourcepub fn rank(self, expr: RankExpr) -> Self
pub fn rank(self, expr: RankExpr) -> Self
Sets the ranking expression for scoring and ordering results.
§Arguments
expr- A ranking expression (typically Knn or a combination of expressions)
§Examples
§Simple KNN ranking
use chroma_types::plan::SearchPayload;
use chroma_types::operator::{RankExpr, QueryVector, Key};
let search = SearchPayload::default()
.rank(RankExpr::Knn {
query: QueryVector::Dense(vec![0.1, 0.2, 0.3]),
key: Key::Embedding,
limit: 100,
default: None,
return_rank: false,
});§Weighted combination
use chroma_types::plan::SearchPayload;
use chroma_types::operator::{RankExpr, QueryVector, Key};
let knn1 = RankExpr::Knn {
query: QueryVector::Dense(vec![0.1, 0.2, 0.3]),
key: Key::Embedding,
limit: 100,
default: None,
return_rank: false,
};
let knn2 = RankExpr::Knn {
query: QueryVector::Dense(vec![0.2, 0.3, 0.4]),
key: Key::field("other_embedding"),
limit: 100,
default: None,
return_rank: false,
};
let search = SearchPayload::default()
.rank(knn1 * 0.8 + knn2 * 0.2);Sourcepub fn select<I, T>(self, keys: I) -> Self
pub fn select<I, T>(self, keys: I) -> Self
Selects which fields to include in the results.
§Arguments
keys- Fields to include (e.g., Document, Score, Metadata, or custom fields)
§Examples
use chroma_types::plan::SearchPayload;
use chroma_types::operator::Key;
// Select predefined fields
let search = SearchPayload::default()
.select([Key::Document, Key::Score]);
// Select metadata fields
let search = SearchPayload::default()
.select([Key::field("title"), Key::field("author")]);
// Mix predefined and custom fields
let search = SearchPayload::default()
.select([Key::Document, Key::Score, Key::field("title")]);Sourcepub fn where(self, where: Where) -> Self
pub fn where(self, where: Where) -> Self
Sets the filter expression for narrowing results.
§Arguments
where- A Where expression for filtering
§Examples
§Simple equality filter
use chroma_types::plan::SearchPayload;
use chroma_types::operator::Key;
let search = SearchPayload::default()
.r#where(Key::field("status").eq("published"));§Numeric comparisons
use chroma_types::plan::SearchPayload;
use chroma_types::operator::Key;
let search = SearchPayload::default()
.r#where(Key::field("year").gte(2020));§Combining filters
use chroma_types::plan::SearchPayload;
use chroma_types::operator::Key;
let search = SearchPayload::default()
.r#where(
Key::field("status").eq("published")
& Key::field("year").gte(2020)
& Key::field("category").is_in(vec!["tech", "science"])
);§Document content filtering
use chroma_types::plan::SearchPayload;
use chroma_types::operator::Key;
let search = SearchPayload::default()
.r#where(Key::Document.contains("machine learning"));Trait Implementations§
Source§impl Clone for SearchPayload
impl Clone for SearchPayload
Source§fn clone(&self) -> SearchPayload
fn clone(&self) -> SearchPayload
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for SearchPayload
impl Debug for SearchPayload
Source§impl Default for SearchPayload
impl Default for SearchPayload
Source§fn default() -> SearchPayload
fn default() -> SearchPayload
Returns the “default value” for a type. Read more
Source§impl<'de> Deserialize<'de> for SearchPayload
impl<'de> Deserialize<'de> for SearchPayload
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 Serialize for SearchPayload
impl Serialize for SearchPayload
Source§impl TryFrom<SearchPayload> for SearchPayload
impl TryFrom<SearchPayload> for SearchPayload
Source§type Error = QueryConversionError
type Error = QueryConversionError
The type returned in the event of a conversion error.
Source§impl TryFrom<SearchPayload> for SearchPayload
impl TryFrom<SearchPayload> for SearchPayload
Source§type Error = QueryConversionError
type Error = QueryConversionError
The type returned in the event of a conversion error.
Source§impl Validate for SearchPayload
impl Validate for SearchPayload
Source§impl<'v_a> ValidateArgs<'v_a> for SearchPayload
impl<'v_a> ValidateArgs<'v_a> for SearchPayload
Auto Trait Implementations§
impl Freeze for SearchPayload
impl RefUnwindSafe for SearchPayload
impl Send for SearchPayload
impl Sync for SearchPayload
impl Unpin for SearchPayload
impl UnwindSafe for SearchPayload
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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.