pub struct TrigramQuery {
pub dnfs: Vec<TrigramDnf>,
}Expand description
A boolean query over trigrams: a conjunction of DNFs. A document is a candidate when it satisfies every DNF, where a DNF is satisfied when at least one of its AND-groups is fully present in the document.
This one shape expresses everything the planner produces:
- an exact literal is one DNF with a single AND-group (all its trigrams);
- a case-insensitive literal contributes one DNF per needle window, each a disjunction of single-trigram groups (the window’s fold variants);
- a regex contributes a DNF for its required prefix literals and another for its required suffix literals.
A DNF that cannot filter (it is empty, or contains an empty group, which would make it trivially true) is ignored. An empty query means “scan everything”.
Fields§
§dnfs: Vec<TrigramDnf>Implementations§
Source§impl TrigramQuery
impl TrigramQuery
Sourcepub fn is_unconstrained(&self) -> bool
pub fn is_unconstrained(&self) -> bool
True when no usable trigram constraints exist and all documents are candidates.
pub fn from_literal(needle: &[u8]) -> TrigramQuery
Sourcepub fn from_literal_ci(needle: &[u8]) -> TrigramQuery
pub fn from_literal_ci(needle: &[u8]) -> TrigramQuery
Build a case-insensitive literal query. Each 3-byte window of the needle becomes one DNF listing every byte sequence the window can begin with in a match, so the trigram index can still prune candidates without false negatives.
The matcher folds case Unicode-aware, so a window’s variants are not
just its ASCII case permutations: s/S also matches U+017F (LATIN
SMALL LETTER LONG S) and k/K also matches U+212A (KELVIN SIGN),
whose UTF-8 encodings are multi-byte. For each window we enumerate every
combination of per-character fold forms and take the first three bytes
of each — exactly the set of trigrams a match of that window can start
with. Windows containing non-ASCII needle bytes are skipped (their fold
forms aren’t enumerable this way), which only widens the candidate set.
Trait Implementations§
Source§impl Clone for TrigramQuery
impl Clone for TrigramQuery
Source§fn clone(&self) -> TrigramQuery
fn clone(&self) -> TrigramQuery
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TrigramQuery
impl Debug for TrigramQuery
Source§impl Default for TrigramQuery
impl Default for TrigramQuery
Source§fn default() -> TrigramQuery
fn default() -> TrigramQuery
Auto Trait Implementations§
impl Freeze for TrigramQuery
impl RefUnwindSafe for TrigramQuery
impl Send for TrigramQuery
impl Sync for TrigramQuery
impl Unpin for TrigramQuery
impl UnsafeUnpin for TrigramQuery
impl UnwindSafe for TrigramQuery
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> 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