django-elasticsearch-dsl-drf¶
Integrate Elasticsearch DSL with Django REST framework in the shortest way possible, with least efforts possible.
Package provides views, serializers, filter backends, pagination and other handy add-ons.
You are expected to use django-elasticsearch-dsl for defining your Elasticsearch documents.
Prerequisites¶
- Django 1.11, 2.0, 2.1 and 2.2.
- Python 2.7, 3.5, 3.6, 3.7.
- Elasticsearch 6.x, 7.x. For older versions use
django-elasticsearch-dsl-drf
version 0.18.
Main features and highlights¶
- Dynamic serializer for Documents.
- Search filter backend.
- Ordering filter backend.
- Filtering filter backend (big variety of
native- and functional- query lookups, such as
gt
,gte
,lt
,lte
,endswith
,contains
,wildcard
,exists
,exclude
,isnull
,range
,in
,prefix
(same asstartswith
),term
andterms
is implemented. - Geo-spatial filtering filter backend (the
following filters implemented:
geo_distance
,geo_polygon
andgeo_bounding_box
). - Geo-spatial ordering filter backend (the
following filters implemented:
geo_distance
). - Faceted search filter backend.
- Post-filter filter backend.
- Nested filtering filter backend.
- Highlight backend.
- Suggester filter backend.
- Functional suggester filter backend.
- Pagination (Page number and limit/offset pagination).
- Ids filter backend.
- Multi match search filter backend.
- Simple search query search filter backend.
- More-like-this support (detail action).
- Global aggregations support.
- Source filter backend.
Do you need a similar tool for GraphQL? Check graphene-elastic.
Demo¶
A frontend demo (React based) is available. See the dedicated docs for more information.
To bootstrap evaluation, clone the repository locally and run docker-compose.
docker-compose up
It will set up:
- Elasticsearch on http://localhost:9200
- Django REST framework on http://localhost:8000
- React on http://localhost:3000
Installation¶
Install latest stable version from PyPI:
pip install django-elasticsearch-dsl-drf
or latest stable version from GitHub:
pip install https://github.com/barseghyanartur/django-elasticsearch-dsl-drf/archive/stable.tar.gz
or latest stable version from BitBucket:
pip install https://bitbucket.org/barseghyanartur/django-elasticsearch-dsl-drf/get/stable.tar.gz
Add
rest_framework
,django_elasticsearch_dsl
anddjango_elasticsearch_dsl_drf
toINSTALLED_APPS
:INSTALLED_APPS = ( # ... # REST framework 'rest_framework', # Django Elasticsearch integration 'django_elasticsearch_dsl', # Django REST framework Elasticsearch integration (this package) 'django_elasticsearch_dsl_drf', # ... )
Quick start¶
Perhaps the easiest way to get acquainted with django-elasticsearch-dsl-drf
is to read the quick start tutorial.
See it as a guide of diving into integration of Elasticsearch with Django with very low knowledge entry level.
Testing¶
Project is covered with tests.
To test with all supported Python/Django versions type:
tox
To test against specific environment, type:
tox -e py37-django21
To test just your working environment type:
./runtests.py
To run a single test in your working environment type:
./runtests.py src/django_elasticsearch_dsl_drf/tests/test_filtering.py
Or:
./manage.py test django_elasticsearch_dsl_drf.tests.test_ordering
To run a single test class in a given test module in your working environment type:
./runtests.py src/django_elasticsearch_dsl_drf/tests/test_suggesters.py::TestSuggesters
It’s assumed that you have all the requirements installed. If not, first install the test requirements:
pip install -r examples/requirements/test.txt
Writing documentation¶
Keep the following hierarchy.
=====
title
=====
header
======
sub-header
----------
sub-sub-header
~~~~~~~~~~~~~~
sub-sub-sub-header
^^^^^^^^^^^^^^^^^^
sub-sub-sub-sub-header
++++++++++++++++++++++
sub-sub-sub-sub-sub-header
**************************
Author¶
Artur Barseghyan <artur.barseghyan@gmail.com>
Project documentation¶
Contents:
Table of Contents
- django-elasticsearch-dsl-drf
- Documentation
- Prerequisites
- Main features and highlights
- Demo
- Installation
- Quick start
- Testing
- Writing documentation
- License
- Support
- Author
- Project documentation
- Dependencies
- Installing Elasticsearch
- Quick start
- Filter usage examples
- Search backends
- Basic usage examples
- Advanced usage examples
- Nested fields usage examples
- More like this
- Global aggregations
- Configuration tweaks
- Source filtering backend
- Indexing troubleshooting
- FAQ
- frontend demo for django-elasticsearch-dsl-drf
- Release history and notes
- 0.20.2
- 0.20.1
- 0.20
- 0.19
- 0.18
- 0.17.7
- 0.17.6
- 0.17.5
- 0.17.4
- 0.17.3
- 0.17.2
- 0.17.1
- 0.17
- 0.16.3
- 0.16.2
- 0.16.1
- 0.16
- 0.15.1
- 0.15
- 0.14
- 0.13.2
- 0.13.1
- 0.13
- 0.12
- 0.11
- 0.10
- 0.9
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8
- 0.7.2
- 0.7.1
- 0.7
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6
- 0.5.1
- 0.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4
- 0.3.12
- 0.3.11
- 0.3.10
- 0.3.9
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1
- django_elasticsearch_dsl_drf package
- Subpackages
- django_elasticsearch_dsl_drf.fields package
- django_elasticsearch_dsl_drf.filter_backends package
- Subpackages
- django_elasticsearch_dsl_drf.filter_backends.aggregations package
- django_elasticsearch_dsl_drf.filter_backends.filtering package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.filtering.common module
- django_elasticsearch_dsl_drf.filter_backends.filtering.geo_spatial module
- django_elasticsearch_dsl_drf.filter_backends.filtering.ids module
- django_elasticsearch_dsl_drf.filter_backends.filtering.nested module
- django_elasticsearch_dsl_drf.filter_backends.filtering.post_filter module
- Module contents
- django_elasticsearch_dsl_drf.filter_backends.ordering package
- django_elasticsearch_dsl_drf.filter_backends.search package
- Subpackages
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.base module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.match module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.match_phrase module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.match_phrase_prefix module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.multi_match module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.nested module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.simple_query_string module
- Module contents
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.search.base module
- django_elasticsearch_dsl_drf.filter_backends.search.compound module
- django_elasticsearch_dsl_drf.filter_backends.search.historical module
- django_elasticsearch_dsl_drf.filter_backends.search.multi_match module
- django_elasticsearch_dsl_drf.filter_backends.search.query_string module
- django_elasticsearch_dsl_drf.filter_backends.search.simple_query_string module
- Module contents
- Subpackages
- django_elasticsearch_dsl_drf.filter_backends.suggester package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.faceted_search module
- django_elasticsearch_dsl_drf.filter_backends.highlight module
- django_elasticsearch_dsl_drf.filter_backends.mixins module
- Module contents
- Subpackages
- django_elasticsearch_dsl_drf.tests package
- Submodules
- django_elasticsearch_dsl_drf.tests.base module
- django_elasticsearch_dsl_drf.tests.data_mixins module
- django_elasticsearch_dsl_drf.tests.test_faceted_search module
- django_elasticsearch_dsl_drf.tests.test_filtering_common module
- django_elasticsearch_dsl_drf.tests.test_filtering_geo_spatial module
- django_elasticsearch_dsl_drf.tests.test_filtering_global_aggregations module
- django_elasticsearch_dsl_drf.tests.test_filtering_nested module
- django_elasticsearch_dsl_drf.tests.test_filtering_post_filter module
- django_elasticsearch_dsl_drf.tests.test_functional_suggesters module
- django_elasticsearch_dsl_drf.tests.test_helpers module
- django_elasticsearch_dsl_drf.tests.test_highlight module
- django_elasticsearch_dsl_drf.tests.test_more_like_this module
- django_elasticsearch_dsl_drf.tests.test_ordering_common module
- django_elasticsearch_dsl_drf.tests.test_ordering_geo_spatial module
- django_elasticsearch_dsl_drf.tests.test_pagination module
- django_elasticsearch_dsl_drf.tests.test_pip_helpers module
- django_elasticsearch_dsl_drf.tests.test_search module
- django_elasticsearch_dsl_drf.tests.test_search_multi_match module
- django_elasticsearch_dsl_drf.tests.test_search_simple_query_string module
- django_elasticsearch_dsl_drf.tests.test_serializers module
- django_elasticsearch_dsl_drf.tests.test_suggesters module
- django_elasticsearch_dsl_drf.tests.test_views module
- django_elasticsearch_dsl_drf.tests.test_wrappers module
- Module contents
- Submodules
- django_elasticsearch_dsl_drf.analyzers module
- django_elasticsearch_dsl_drf.apps module
- django_elasticsearch_dsl_drf.compat module
- django_elasticsearch_dsl_drf.constants module
- django_elasticsearch_dsl_drf.helpers module
- django_elasticsearch_dsl_drf.pagination module
- django_elasticsearch_dsl_drf.pip_helpers module
- django_elasticsearch_dsl_drf.serializers module
- django_elasticsearch_dsl_drf.utils module
- django_elasticsearch_dsl_drf.versions module
- django_elasticsearch_dsl_drf.viewsets module
- django_elasticsearch_dsl_drf.wrappers module
- Module contents
- Subpackages
- Indices and tables
- Dependencies
- Installing Elasticsearch
- Quick start
- Filter usage examples
- Search backends
- Basic usage examples
- Advanced usage examples
- Nested fields usage examples
- More like this
- Global aggregations
- Configuration tweaks
- Source filtering backend
- Indexing troubleshooting
- FAQ
- frontend demo for django-elasticsearch-dsl-drf
- Release history and notes
- 0.20.2
- 0.20.1
- 0.20
- 0.19
- 0.18
- 0.17.7
- 0.17.6
- 0.17.5
- 0.17.4
- 0.17.3
- 0.17.2
- 0.17.1
- 0.17
- 0.16.3
- 0.16.2
- 0.16.1
- 0.16
- 0.15.1
- 0.15
- 0.14
- 0.13.2
- 0.13.1
- 0.13
- 0.12
- 0.11
- 0.10
- 0.9
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8
- 0.7.2
- 0.7.1
- 0.7
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6
- 0.5.1
- 0.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4
- 0.3.12
- 0.3.11
- 0.3.10
- 0.3.9
- 0.3.8
- 0.3.7
- 0.3.6
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1
- 0.3
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1
- django_elasticsearch_dsl_drf package
- Subpackages
- django_elasticsearch_dsl_drf.fields package
- django_elasticsearch_dsl_drf.filter_backends package
- Subpackages
- django_elasticsearch_dsl_drf.filter_backends.aggregations package
- django_elasticsearch_dsl_drf.filter_backends.filtering package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.filtering.common module
- django_elasticsearch_dsl_drf.filter_backends.filtering.geo_spatial module
- django_elasticsearch_dsl_drf.filter_backends.filtering.ids module
- django_elasticsearch_dsl_drf.filter_backends.filtering.nested module
- django_elasticsearch_dsl_drf.filter_backends.filtering.post_filter module
- Module contents
- django_elasticsearch_dsl_drf.filter_backends.ordering package
- django_elasticsearch_dsl_drf.filter_backends.search package
- Subpackages
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.base module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.match module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.match_phrase module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.match_phrase_prefix module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.multi_match module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.nested module
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends.simple_query_string module
- Module contents
- django_elasticsearch_dsl_drf.filter_backends.search.query_backends package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.search.base module
- django_elasticsearch_dsl_drf.filter_backends.search.compound module
- django_elasticsearch_dsl_drf.filter_backends.search.historical module
- django_elasticsearch_dsl_drf.filter_backends.search.multi_match module
- django_elasticsearch_dsl_drf.filter_backends.search.query_string module
- django_elasticsearch_dsl_drf.filter_backends.search.simple_query_string module
- Module contents
- Subpackages
- django_elasticsearch_dsl_drf.filter_backends.suggester package
- Submodules
- django_elasticsearch_dsl_drf.filter_backends.faceted_search module
- django_elasticsearch_dsl_drf.filter_backends.highlight module
- django_elasticsearch_dsl_drf.filter_backends.mixins module
- Module contents
- Subpackages
- django_elasticsearch_dsl_drf.tests package
- Submodules
- django_elasticsearch_dsl_drf.tests.base module
- django_elasticsearch_dsl_drf.tests.data_mixins module
- django_elasticsearch_dsl_drf.tests.test_faceted_search module
- django_elasticsearch_dsl_drf.tests.test_filtering_common module
- django_elasticsearch_dsl_drf.tests.test_filtering_geo_spatial module
- django_elasticsearch_dsl_drf.tests.test_filtering_global_aggregations module
- django_elasticsearch_dsl_drf.tests.test_filtering_nested module
- django_elasticsearch_dsl_drf.tests.test_filtering_post_filter module
- django_elasticsearch_dsl_drf.tests.test_functional_suggesters module
- django_elasticsearch_dsl_drf.tests.test_helpers module
- django_elasticsearch_dsl_drf.tests.test_highlight module
- django_elasticsearch_dsl_drf.tests.test_more_like_this module
- django_elasticsearch_dsl_drf.tests.test_ordering_common module
- django_elasticsearch_dsl_drf.tests.test_ordering_geo_spatial module
- django_elasticsearch_dsl_drf.tests.test_pagination module
- django_elasticsearch_dsl_drf.tests.test_pip_helpers module
- django_elasticsearch_dsl_drf.tests.test_search module
- django_elasticsearch_dsl_drf.tests.test_search_multi_match module
- django_elasticsearch_dsl_drf.tests.test_search_simple_query_string module
- django_elasticsearch_dsl_drf.tests.test_serializers module
- django_elasticsearch_dsl_drf.tests.test_suggesters module
- django_elasticsearch_dsl_drf.tests.test_views module
- django_elasticsearch_dsl_drf.tests.test_wrappers module
- Module contents
- Submodules
- django_elasticsearch_dsl_drf.analyzers module
- django_elasticsearch_dsl_drf.apps module
- django_elasticsearch_dsl_drf.compat module
- django_elasticsearch_dsl_drf.constants module
- django_elasticsearch_dsl_drf.helpers module
- django_elasticsearch_dsl_drf.pagination module
- django_elasticsearch_dsl_drf.pip_helpers module
- django_elasticsearch_dsl_drf.serializers module
- django_elasticsearch_dsl_drf.utils module
- django_elasticsearch_dsl_drf.versions module
- django_elasticsearch_dsl_drf.viewsets module
- django_elasticsearch_dsl_drf.wrappers module
- Module contents
- Subpackages