Eve-Elastic is elastic data layer for eve REST framework.
- fulltext search
- filtering via elasticsearch filter dsl
- facets support
- aggregations support
- elasticsearch mapping generator for schema
Eve-Elastic is GPLv3 licensed.
It supports elastic 7
versions.
$ pip install Eve-Elastic
Set elastic as your eve data layer.
import eve
from eve_elastic import Elastic
app = eve.Eve(data=Elastic)
app.run()
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 urlsELASTICSEARCH_INDEX
- (default:'eve'
)ELASTICSEARCH_INDEXES
- (default:{}
) -resource
toindex
mappingELASTICSEARCH_FORCE_REFRESH
- (default:True
) - force index refresh after every modificationELASTICSEARCH_AUTO_AGGREGATIONS
- (default:True
) - return aggregates on every search if configured for resource
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.
$ curl http://localhost:5000/items?q=foo&df=name
q
- query (default:*
)df
- default field (default:_all
)
For more sophisticated filtering, you can use filter
query param which will be used as filter for the query,
using elastic filter dsl.
To add a facets support for specific resource, add facets
into its datasource
:
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.