pub trait Query:
Display
+ Send
+ Sync {
// Required methods
fn scorer<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
) -> ScorerFuture<'a>;
fn count_estimate<'a>(&self, reader: &'a SegmentReader) -> CountFuture<'a>;
// Provided methods
fn scorer_with_options<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
options: ScorerOptions,
) -> ScorerFuture<'a> { ... }
fn scorer_sync<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
) -> Result<Box<dyn Scorer + 'a>> { ... }
fn scorer_sync_with_options<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
options: ScorerOptions,
) -> Result<Box<dyn Scorer + 'a>> { ... }
fn decompose(&self) -> QueryDecomposition { ... }
fn is_filter(&self) -> bool { ... }
fn as_doc_predicate<'a>(
&self,
_reader: &'a SegmentReader,
) -> Option<DocPredicate<'a>> { ... }
fn as_doc_bitset(&self, _reader: &SegmentReader) -> Option<DocBitset> { ... }
fn bitset_cardinality_estimate(
&self,
_reader: &SegmentReader,
) -> Option<u64> { ... }
}Expand description
A search query (async)
Note: scorer takes &self (not &'a self) so that scorers don’t borrow the query.
This enables query composition - queries can create sub-queries locally and get their scorers.
Implementations must clone/capture any data they need during scorer creation.
Required Methods§
Sourcefn scorer<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
) -> ScorerFuture<'a>
fn scorer<'a>( &self, reader: &'a SegmentReader, limit: usize, ) -> ScorerFuture<'a>
Create a scorer for this query against a single segment (async)
The limit parameter specifies the maximum number of results to return.
This is passed from the top-level search limit.
Note: The scorer borrows only the reader, not the query. Implementations should capture any needed query data (field, terms, etc.) during creation.
Sourcefn count_estimate<'a>(&self, reader: &'a SegmentReader) -> CountFuture<'a>
fn count_estimate<'a>(&self, reader: &'a SegmentReader) -> CountFuture<'a>
Estimated number of matching documents in a segment (async)
Provided Methods§
Sourcefn scorer_with_options<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
options: ScorerOptions,
) -> ScorerFuture<'a>
fn scorer_with_options<'a>( &self, reader: &'a SegmentReader, limit: usize, options: ScorerOptions, ) -> ScorerFuture<'a>
Create a scorer with collector-specific construction options. Query implementations that can avoid optional position data should override this; the default preserves existing behavior.
Sourcefn scorer_sync<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
) -> Result<Box<dyn Scorer + 'a>>
fn scorer_sync<'a>( &self, reader: &'a SegmentReader, limit: usize, ) -> Result<Box<dyn Scorer + 'a>>
Create a scorer synchronously (mmap/RAM only).
Available when the sync feature is enabled.
Default implementation returns an error.
Sourcefn scorer_sync_with_options<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
options: ScorerOptions,
) -> Result<Box<dyn Scorer + 'a>>
fn scorer_sync_with_options<'a>( &self, reader: &'a SegmentReader, limit: usize, options: ScorerOptions, ) -> Result<Box<dyn Scorer + 'a>>
Synchronous counterpart to Query::scorer_with_options.
Sourcefn decompose(&self) -> QueryDecomposition
fn decompose(&self) -> QueryDecomposition
Decompose this query for MaxScore optimization.
Returns TextTerm for simple term queries, SparseTerms for
sparse vector queries (single or multi-dim), or Opaque if
the query cannot be decomposed.
Sourcefn is_filter(&self) -> bool
fn is_filter(&self) -> bool
True if this query is a pure filter (always scores 1.0, no positions). Used by the planner to convert non-selective MUST filters into predicates.
Sourcefn as_doc_predicate<'a>(
&self,
_reader: &'a SegmentReader,
) -> Option<DocPredicate<'a>>
fn as_doc_predicate<'a>( &self, _reader: &'a SegmentReader, ) -> Option<DocPredicate<'a>>
For filter queries: return a cheap per-doc predicate against a segment. The predicate does O(1) work per doc (e.g., fast-field lookup).
Sourcefn as_doc_bitset(&self, _reader: &SegmentReader) -> Option<DocBitset>
fn as_doc_bitset(&self, _reader: &SegmentReader) -> Option<DocBitset>
Build a compact bitset of matching doc_ids for this query.
Preferred over as_doc_predicate for BMP filtered queries because
bitset lookup is ~2ns vs ~30-40ns for a fast-field closure.
Default returns None; TermQuery overrides this to build from its
posting list in O(M) time.
Sourcefn bitset_cardinality_estimate(&self, _reader: &SegmentReader) -> Option<u64>
fn bitset_cardinality_estimate(&self, _reader: &SegmentReader) -> Option<u64>
Cheap estimate of how many docs this filter clause matches in
the segment. Used by the boolean planner to order MUST/MUST_NOT
evaluation: the narrowest clause is materialized first and wider
clauses refine it with per-doc probes instead of being fully
materialized. None = unknown (treated as matching everything).
Trait Implementations§
Source§impl Query for Box<dyn Query>
impl Query for Box<dyn Query>
Source§fn scorer<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
) -> ScorerFuture<'a>
fn scorer<'a>( &self, reader: &'a SegmentReader, limit: usize, ) -> ScorerFuture<'a>
Source§fn count_estimate<'a>(&self, reader: &'a SegmentReader) -> CountFuture<'a>
fn count_estimate<'a>(&self, reader: &'a SegmentReader) -> CountFuture<'a>
Source§fn scorer_with_options<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
options: ScorerOptions,
) -> ScorerFuture<'a>
fn scorer_with_options<'a>( &self, reader: &'a SegmentReader, limit: usize, options: ScorerOptions, ) -> ScorerFuture<'a>
Source§fn decompose(&self) -> QueryDecomposition
fn decompose(&self) -> QueryDecomposition
Source§fn is_filter(&self) -> bool
fn is_filter(&self) -> bool
Source§fn as_doc_predicate<'a>(
&self,
reader: &'a SegmentReader,
) -> Option<DocPredicate<'a>>
fn as_doc_predicate<'a>( &self, reader: &'a SegmentReader, ) -> Option<DocPredicate<'a>>
Source§fn as_doc_bitset(&self, reader: &SegmentReader) -> Option<DocBitset>
fn as_doc_bitset(&self, reader: &SegmentReader) -> Option<DocBitset>
Source§fn bitset_cardinality_estimate(&self, reader: &SegmentReader) -> Option<u64>
fn bitset_cardinality_estimate(&self, reader: &SegmentReader) -> Option<u64>
None = unknown (treated as matching everything).Source§fn scorer_sync<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
) -> Result<Box<dyn Scorer + 'a>>
fn scorer_sync<'a>( &self, reader: &'a SegmentReader, limit: usize, ) -> Result<Box<dyn Scorer + 'a>>
Source§fn scorer_sync_with_options<'a>(
&self,
reader: &'a SegmentReader,
limit: usize,
options: ScorerOptions,
) -> Result<Box<dyn Scorer + 'a>>
fn scorer_sync_with_options<'a>( &self, reader: &'a SegmentReader, limit: usize, options: ScorerOptions, ) -> Result<Box<dyn Scorer + 'a>>
Query::scorer_with_options.Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".