Crate elipdotter

source ·
Expand description

A light-weight (2 total dependencies, including descendants) embeddable search engine with support for typo tolerance, result relevance, and complex queries, powered by iterators.

If you want page relevancy (like PageRank), you have to implement it on your own.

Also note that you have to provide this library with data and data updates. See kvarn-search for an example on this.


When we search for occurrences of a requested word, we get a sorted Iterator. This allows query to chain iterators together to perform complex queries with few allocations. Only once the client iterates over the occurrences and their relevance do they get processed, ensuring minimal computational expense.

Say you want to get the best result, then you can just call Iterator::next once, and only one occurrence is processed.

You may want to read the article on writing the first iteration of elipdotter.


pub use index::DocumentMap;
pub use index::Lossless as LosslessIndex;
pub use index::LosslessOccurrences as LosslessOccurrencesProvider;
pub use index::Simple as SimpleIndex;
pub use index::SimpleOccurences as SimpleOccurrencesProvider;
pub use query::Hit;
pub use query::Part;
pub use query::Query;


The index (lookup table of words) lives here. The trait Provider (and OccurenceProvider) enables multiple types of indices to be defined.
Word similarity for typo tolerance and matching beginning of words.
Query parsing and resolving.
Set operations on ordered iterators. These are the fundamental join operations of the search engine.