Skip to main content
Warning: You are using the test version of PyPI. This is a pre-production deployment of Warehouse. Changes made here affect the production instance of TestPyPI (
Help us improve Python packaging - Donate today!

Python client for Elasticsearch built on top of elasticsearch-dsl

Project Description


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 5.X and works with both Python 2.7 and Python 3.3

Code example

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(
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,
# },
# [...]
# ]


Documentation is available at


The fiqs project is hosted on [GitLab](<>)

To run the tests on your machine use this command: ``python 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:5.0.2`` and then run ``py.test -k docker``.


See attached LICENSE file.

Release History

This version
History Node


History Node


History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Hash SHA256 Hash Help Version File Type Upload Date
(17.9 kB) Copy SHA256 Hash SHA256
Source Mar 23, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting