Tantivy is a full text search engine library written in Rust.
It is closer to Apache Lucene than to Elasticsearch or Apache Solr in the sense it is not an off-the-shelf search engine server, but rather a crate that can be used to build such a search engine.
Tantivy is, in fact, strongly inspired by Lucene's design.
The following benchmark break downs performance for different type of queries / collection.
Your mileage WILL vary depending on the nature of queries and their load.
(michael AND jackson) OR "king of pop"
)"michael jackson"
)&[u8]
fast fieldsTantivy works on stable Rust (>= 1.27) and supports Linux, MacOS, and Windows.
tantivy-cli
is an actual command line interface that makes it easy for you to create a search engine,
index documents, and search via the CLI or a small server with a REST API.
It walks you through getting a wikipedia search engine up and running in a few minutes.There are many ways to support this project.
We use the GitHub Pull Request workflow: reference a GitHub ticket and/or include a comprehensive commit message when opening a PR.
Tantivy compiles on stable Rust but requires Rust >= 1.27
.
To check out and run tests, you can simply run:
bash
git clone https://github.com/tantivy-search/tantivy.git
cd tantivy
cargo build
Some tests will not run with just cargo test
because of fail-rs
.
To run the tests exhaustively, run ./run-tests.sh
.
You might find it useful to step through the programme with a debugger.
Make sure you haven't run cargo clean
after the most recent cargo test
or cargo build
to guarantee that the target/
directory exists. Use this bash script to find the name of the most recent debug build of Tantivy and run it under rust-gdb
:
bash
find target/debug/ -maxdepth 1 -executable -type f -name "tantivy*" -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | cut -d " " -f 3 | xargs -I RECENT_DBG_TANTIVY rust-gdb RECENT_DBG_TANTIVY
Now that you are in rust-gdb
, you can set breakpoints on lines and methods that match your source code and run the debug executable with flags that you normally pass to cargo test
like this:
bash
$gdb run --test-threads 1 --test $NAME_OF_TEST
By default, rustc
compiles everything in the examples/
directory in debug mode. This makes it easy for you to make examples to reproduce bugs:
bash
rust-gdb target/debug/examples/$EXAMPLE_NAME
$ gdb run