Go to file
Paul Masurel 9158a4fd7d
Merge pull request #1 from matrix-org/initial-bindings
Initial python bindings implementation.
2019-08-01 16:05:15 +09:00
src Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
tantivy Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
tests Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
.gitignore Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
Cargo.toml README: Rename the project to tantivy-py and mention that the are py3 only. 2019-06-06 12:12:57 +02: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
README.md README: Rename the project to tantivy-py and mention that the are py3 only. 2019-06-06 12:12:57 +02:00
pyproject.toml Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
rust-toolchain Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
rustfmt.toml Initial python bindings implementation. 2019-06-04 11:09:58 +02:00
setup.py Initial python bindings implementation. 2019-06-04 11:09:58 +02:00

README.md

tantivy-py

Python bindings for tantivy.

Installation

The bindings can be installed using setuptools:

python3 setup.py install --user

Note that this requires setuptools-rust to be installed. Another thing to note is that the bindings are using PyO3, which requires rust nightly and only supports python3.

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.

    builder = tantivy.SchemaBuilder()

    title = builder.add_text_field("title", stored=True)
    body = builder.add_text_field("body")

    schema = builder.build()
    index = tantivy.Index(schema)

    writer = index.writer()

    doc = tantivy.Document()
    doc.add_text(title, "The Old Man and the Sea")
    doc.add_text(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."))
    writer.add_document(doc)

    reader = index.reader()
    searcher = reader.searcher()

    query_parser = tantivy.QueryParser.for_index(index, [title, body])
    query = query_parser.parse_query("sea whale")

    top_docs = tantivy.TopDocs(10)
    result = searcher.search(query, top_docs)

    _, doc_address = result[0]

    searched_doc = searcher.doc(doc_address)
    assert searched_doc.get_first(title) == "The Old Man and the Sea"