tantivy-py/README.md

84 lines
2.3 KiB
Markdown
Raw Normal View History

2021-10-18 13:31:07 +00:00
[![Build Status](https://travis-ci.org/quickwit-inc/tantivy-py.svg?branch=master)](https://travis-ci.org/quickwit-inc/tantivy-py)
2019-08-08 13:54:27 +00:00
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
tantivy-py
==========
2020-01-25 09:11:27 +00:00
Python bindings for Tantivy.
# Installation
The bindings can be installed using from pypi using pip:
2020-01-25 09:11:27 +00:00
pip install tantivy
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](https://github.com/PyO3/pyo3), which
only supports python3.
# Development
2021-03-19 09:26:19 +00:00
Setting up a development environment can be done in a virtual environment using
2020-01-25 09:11:27 +00:00
`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
2020-01-25 09:11:27 +00:00
The Python bindings have 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.
```python
2019-08-02 11:23:10 +00:00
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()
2019-10-06 11:47:50 +00:00
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."""],
))
2019-08-02 11:23:10 +00:00
# ... and committing
writer.commit()
# Reload the index to ensure it points to the last commit.
2019-10-06 20:59:08 +00:00
index.reload()
2019-08-02 11:23:10 +00:00
searcher = index.searcher()
2019-10-06 11:47:50 +00:00
query = index.parse_query("fish days", ["title", "body"])
2019-08-02 11:23:10 +00:00
(best_score, best_doc_address) = searcher.search(query, 3).hits[0]
best_doc = searcher.doc(best_doc_address)
2019-08-02 11:23:10 +00:00
assert best_doc["title"] == ["The Old Man and the Sea"]
2019-10-06 11:47:50 +00:00
print(best_doc)
```