Struct porigon::Searchable
source · [−]pub struct Searchable<'a, D: DuplicatesLookup> { /* private fields */ }
Expand description
Main entry point to querying FSTs.
This is a thin wrapper around fst::Map
, providing easy access to querying it in
various ways (exact_match, starts_with, levenshtein, …).
Implementations
Creates a SearchStream
from a StartsWith
matcher for the given query
.
Example
use fst::Streamer;
use porigon::SearchableStorage;
let items = vec!(
("bar".as_bytes(), 1),
("foo".as_bytes(), 2),
("foo_bar".as_bytes(), 3)
);
let storage = SearchableStorage::build_from_iter(items).unwrap();
let searchable = storage.to_searchable().unwrap();
let mut strm = searchable.starts_with("foo");
assert_eq!(strm.next(), Some(("foo".as_bytes(), 2, 0)));
assert_eq!(strm.next(), Some(("foo_bar".as_bytes(), 3, 0)));
assert_eq!(strm.next(), None);
Creates a SearchStream
from an ExactMatch
matcher for the given query
.
Example
use fst::Streamer;
use porigon::SearchableStorage;
let items = vec!(
("bar".as_bytes(), 1),
("foo".as_bytes(), 2),
("foo_bar".as_bytes(), 3)
);
let storage = SearchableStorage::build_from_iter(items).unwrap();
let searchable = storage.to_searchable().unwrap();
let mut strm = searchable.exact_match("foo");
assert_eq!(strm.next(), Some(("foo".as_bytes(), 2, 0)));
assert_eq!(strm.next(), None);
pub fn levenshtein<'a, DFA>(&'a self, dfa: DFA) -> impl SearchStream<'a> where
DFA: Into<MaybeOwned<'a, DFA>>,
pub fn levenshtein<'a, DFA>(&'a self, dfa: DFA) -> impl SearchStream<'a> where
DFA: Into<MaybeOwned<'a, DFA>>,
Creates a SearchStream
from a levenshtein_automata::DFA
matcher.
This method supports both moving the DFA or passing a reference to it.
Example
use fst::Streamer;
use porigon::{LevenshteinAutomatonBuilder, SearchableStorage};
let items = vec!(
("bar".as_bytes(), 1),
("fob".as_bytes(), 2),
("foo".as_bytes(), 3),
("foo_bar".as_bytes(), 4)
);
let storage = SearchableStorage::build_from_iter(items).unwrap();
let searchable = storage.to_searchable().unwrap();
let levenshtein_builder = LevenshteinAutomatonBuilder::new(1, false);
let dfa = levenshtein_builder.build_dfa("foo");
let mut strm = searchable.levenshtein(&dfa);
assert_eq!(strm.next(), Some(("fob".as_bytes(), 2, 0)));
assert_eq!(strm.next(), Some(("foo".as_bytes(), 3, 0)));
assert_eq!(strm.next(), None);
pub fn levenshtein_exact_match<'a>(
&'a self,
builder: &LevenshteinAutomatonBuilder,
query: &'a str
) -> impl SearchStream<'a>
pub fn levenshtein_exact_match<'a>(
&'a self,
builder: &LevenshteinAutomatonBuilder,
query: &'a str
) -> impl SearchStream<'a>
Creates a SearchStream
for a LevenshteinAutomatonBuilder
and the given query
.
Example
use fst::Streamer;
use porigon::{LevenshteinAutomatonBuilder, SearchableStorage};
let items = vec!(
("bar".as_bytes(), 1),
("fob".as_bytes(), 2),
("foo".as_bytes(), 3),
("foo_bar".as_bytes(), 4)
);
let storage = SearchableStorage::build_from_iter(items).unwrap();
let searchable = storage.to_searchable().unwrap();
let levenshtein_builder = LevenshteinAutomatonBuilder::new(1, false);
let dfa = levenshtein_builder.build_dfa("foo");
let mut strm = searchable.levenshtein_exact_match(&levenshtein_builder, "foo");
assert_eq!(strm.next(), Some(("fob".as_bytes(), 2, 0)));
assert_eq!(strm.next(), Some(("foo".as_bytes(), 3, 0)));
assert_eq!(strm.next(), None);
pub fn levenshtein_starts_with<'a>(
&'a self,
builder: &LevenshteinAutomatonBuilder,
query: &'a str
) -> impl SearchStream<'a>
pub fn levenshtein_starts_with<'a>(
&'a self,
builder: &LevenshteinAutomatonBuilder,
query: &'a str
) -> impl SearchStream<'a>
Creates a SearchStream
for a LevenshteinAutomatonBuilder
and the given query
.
Example
use fst::Streamer;
use porigon::{LevenshteinAutomatonBuilder, SearchableStorage};
let items = vec!(
("bar".as_bytes(), 1),
("fob".as_bytes(), 2),
("foo".as_bytes(), 3),
("foo_bar".as_bytes(), 4)
);
let storage = SearchableStorage::build_from_iter(items).unwrap();
let searchable = storage.to_searchable().unwrap();
let levenshtein_builder = LevenshteinAutomatonBuilder::new(1, false);
let dfa = levenshtein_builder.build_dfa("foo");
let mut strm = searchable.levenshtein_starts_with(&levenshtein_builder, "foo");
assert_eq!(strm.next(), Some(("fob".as_bytes(), 2, 0)));
assert_eq!(strm.next(), Some(("foo".as_bytes(), 3, 0)));
assert_eq!(strm.next(), Some(("foo_bar".as_bytes(), 4, 0)));
assert_eq!(strm.next(), None);
Creates a SearchStream
from a Subsequence
matcher for the given query
.
Example
use fst::Streamer;
use porigon::SearchableStorage;
let items = vec!(("bar_foo".as_bytes(), 2), ("foo".as_bytes(), 0), ("foo_bar".as_bytes(), 1));
let storage = SearchableStorage::build_from_iter(items).unwrap();
let searchable = storage.to_searchable().unwrap();
let mut strm = searchable.subsequence("fb");
assert_eq!(strm.next(), Some(("foo_bar".as_bytes(), 1, 0)));
assert_eq!(strm.next(), None);