fiqs is an opinionated high-level library whose goal is to help you write concise queries agains Elasticsearch and better consume the results. It is built on top of the awesome Elasticsearch DSL library.
fiqs exposes a flatten_result
function which transforms an elasticsearch-dsl Result
, or a dictionary, into the list of its nodes.
fiqs also lets you create Model classes, a la Django, which automatically generates an Elasticsearch mapping.
Finally fiqs exposes a FQuery
objects which, leveraging your models, lets you write less verbose queries against Elasticsearch.
fiqs is compatible with Elasticsearch 6.X and works with Python3
Documentation is available at https://fiqs.readthedocs.io/
You define a model, matching what is in your Elasticsearch cluster:
from fiqs import models
class Sale(models.Model):
index = 'sale_data'
doc_type = 'sale'
id = fields.IntegerField()
shop_id = fields.IntegerField()
client_id = fields.KeywordField()
timestamp = fields.DateField()
price = fields.IntegerField()
payment_type = fields.KeywordField(choices=['wire_transfer', 'cash', 'store_credit'])
You can then write clean queries:
from elasticsearch_dsl import Search
from fiqs.aggregations import Sum
from fiqs.query import FQuery
from .models import Sale
search = Search(...)
metric = FQuery(search).values(
total_sales=Sum(Sale.price),
).group_by(
Sale.shop_id,
Sale.client_id,
)
result = metric.eval()
And let fiqs organise the results:
print(result)
# [
# {
# "shop_id": 1,
# "client_id": 1,
# "doc_count": 30,
# "total_sales": 12345.0,
# },
# {
# "shop_id": 2,
# "client_id": 1,
# "doc_count": 20,
# "total_sales": 23456.0,
# },
# {
# "shop_id": 3,
# "client_id": 1,
# "doc_count": 10,
# "total_sales": 34567.0,
# },
# [...]
# ]
The fiqs project is hosted on Github
To run the tests on your machine use this command: python setup.py test
Some tests are used to generate results output from Elasticsearch. To run them you will need to run a docker container on your machine: docker run -d -p 8200:9200 -p 8300:9300 elasticsearch:6.x.x
and then run pytest -k docker
.
See attached LICENSE file.