Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/superdesk/eve-elastic

Elasticsearch data layer for eve framework
https://github.com/superdesk/eve-elastic

Last synced: about 2 months ago
JSON representation

Elasticsearch data layer for eve framework

Awesome Lists containing this project

README

        

Eve-Elastic
===========

.. image:: https://travis-ci.org/petrjasek/eve-elastic.png?branch=elastic7
:target: https://travis-ci.org/petrjasek/eve-elastic

Eve-Elastic is `elastic `_ data layer for `eve REST framework `_.

Features
--------

- fulltext search
- filtering via elasticsearch filter dsl
- facets support
- aggregations support
- elasticsearch mapping generator for schema

License
-------
Eve-Elastic is `GPLv3 `_ licensed.

Supported elastic versions
--------------------------

It supports elastic ``7`` versions.

Install
-------

.. code-block:: bash

$ pip install Eve-Elastic

Usage
-----
Set elastic as your eve data layer.

.. code-block:: python

import eve
from eve_elastic import Elastic

app = eve.Eve(data=Elastic)
app.run()

Config
------
There are 2 options for Eve-Elastic taken from ``app.config``:

- ``ELASTICSEARCH_URL`` (default: ``'http://localhost:9200/'``) - this can be either single url or list of urls
- ``ELASTICSEARCH_INDEX`` - (default: ``'eve'``)
- ``ELASTICSEARCH_INDEXES`` - (default: ``{}``) - ``resource`` to ``index`` mapping
- ``ELASTICSEARCH_FORCE_REFRESH`` - (default: ``True``) - force index refresh after every modification
- ``ELASTICSEARCH_AUTO_AGGREGATIONS`` - (default: ``True``) - return aggregates on every search if configured for resource

Query params
------------
Eve-Elastic supports eve like queries via ``where`` param which work as `term `_ filter.

On top of this, there is a predefined `query_string `_ query which does fulltext search.

.. code-block:: bash

$ curl http://localhost:5000/items?q=foo&df=name

- ``q`` - query (default: ``*``)
- ``df`` - default field (default: ``_all``)

Filtering
---------
For more sophisticated filtering, you can use ``filter`` query param which will be used as filter for the query,
using elastic `filter dsl `_.

Facets
------
To add a facets support for specific resource, add ``facets`` into its ``datasource``:

.. code-block:: python

DOMAIN = {
'contacts': {
'datasource':
'facets': {
'urgency': {'terms': {'field': 'urgency'}},
'versioncreated': {'date_histogram': {'field': 'versioncreated', 'interval': 'hour'}}
}
}
}

You will find more info about facets in `elasticsearch docs `_.