Go to file
Damir Jelić 2fa765ef37 Pipfile: Add the local package as a dev-dependency. 2020-01-05 18:49:01 +01:00
ci travis: Add deployment configuration. 2020-01-05 16:48:49 +01:00
src README: Update the docs for the new simpler search API. 2020-01-05 17:22:58 +01:00
tantivy Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
tests Merge remote-tracking branch 'origin/search_api_simplification' 2020-01-05 13:52:35 +01:00
.gitignore gitignore: Add the new maturin provided so file to the ignores. 2020-01-05 14:58:38 +01:00
.travis.yml travis: Add deployment configuration. 2020-01-05 16:48:49 +01:00
Cargo.toml Bump version. 2020-01-05 18:08:26 +01:00
LICENSE Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
MANIFEST.in Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
Makefile Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
Pipfile Pipfile: Add the local package as a dev-dependency. 2020-01-05 18:49:01 +01:00
Pipfile.lock Pipfile: Add the local package as a dev-dependency. 2020-01-05 18:49:01 +01:00
README.md README: Explain the new development setup. 2020-01-05 17:39:20 +01:00
pyproject.toml pyptoject: Use maturin from now on. 2020-01-05 13:52:53 +01:00
rust-toolchain rust-toolchain: Update the toolchain version. 2020-01-05 12:40:37 +01:00
rustfmt.toml Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
tox.ini tantivy: Add a tox.ini file. 2019-08-08 14:22:23 +02:00

README.md

Build Status License: MIT

tantivy-py

Python bindings for tantivy.

Installation

The bindings can be installed using from pypi using pip:

pip install tantivy-py

If no binary wheel is present for your operating system the bindings will be build from source, this means that Rust needs to be installed before building can succeed.

Note that the bindings are using PyO3, which requires rust nightly and only supports python3.

Development

Developing tantivy-py can be done in a virtual environment using pipenv or using local packages using the provided Makefile.

For the pipenv setup install the virtual environment and build the bindings using:

pipenv install --dev
pipenv run maturin develop

After the bindings are build, the tests can be run using:

pipenv run python -m pytest

For the Makefile based setup run:

make

Running the tests is done using:

make test

Usage

tantivy-py has a similar API to tantivy. To create a index first a schema needs to be built. After that documents can be added to the index and a reader can be created to search the index.

import tantivy

# Declaring our schema.
schema_builder = tantivy.SchemaBuilder()
schema_builder.add_text_field("title", stored=True)
schema_builder.add_text_field("body", stored=True)
schema = schema_builder.build()

# Creating our index (in memory, but filesystem is available too)
index = tantivy.Index(schema)


# Adding one document.
writer = index.writer()
writer.add_document(tantivy.Document(
    title=["The Old Man and the Sea"],
    body=["""He was an old man who fished alone in a skiff in the Gulf Stream and he had gone eighty-four days now without taking a fish."""],
))
# ... and committing
writer.commit()


# Reload the index to ensure it points to the last commit.
index.reload()
searcher = index.searcher()
query = index.parse_query("fish days", ["title", "body"])

(best_score, best_doc_address) = searcher.search(query, 3).hits[0]
best_doc = searcher.doc(best_doc_address)
assert best_doc["title"] == ["The Old Man and the Sea"]
print(best_doc)