Usage

Basic usage example:

from splitgill.manager import SplitgillClient
from splitgill.model import Record
from splitgill.search import term_query

# create these yourself
mongo_client = ...
elasticsearch_client = ...

# create a splitgill client and get a SplitgillDatabase object
client = SplitgillClient(mongo_client, elasticsearch_client)
database = client.get_database("my-database")

# add some data to the database
records = [
    Record("animal-1", {"name": "Jeremy", "animalType": "llama", "height": 40.6}),
    Record("animal-2", {"name": "Paru", "animalType": "cat", "height": 10.3}),
    Record("animal-3", {"name": "Frankie", "animalType": "jaguar", "height": 100}),
    Record("animal-4", {"name": "Doti", "animalType": "cat", "height": 14.3}),
]
result = database.ingest(records)
version_1 = result.version

# index the data into Elasticsearch
database.sync()

# search the data
assert database.search().filter(term_query("animalType", "cat")).count() == 2

# update a record
updated_records = [
    # she is a panther now
    Record("animal-2", {"name": "Paru", "animalType": "Panther", "height": 10.3}),
]
database.ingest(records)
database.sync()

# search the data
assert database.search().filter(term_query("animalType", "cat")).count() == 1

# search the data at the first version
assert database.search(version_1).filter(term_query("animalType", "cat")).count() == 1