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-ElasticSet 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:{}) -resourcetoindexmappingELASTICSEARCH_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=nameq- 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.