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.
- Django 1.8, 1.9, 1.10, 1.11, 2.0 and 2.1.
- Python 2.7, 3.4, 3.5, 3.6, 3.7
- Elasticsearch 2.x, 5.x, 6.x
elasticsearch and elasticsearch-dsl
Depending on your Elasticsearch version (either 2.x, 5.x or 6.x) you should
use 2.x, 5.x or 6.x versions of the elasticsearch
and elasticsearch-dsl
packages accordingly.
django-elasticsearch-dsl
You are advised to use the latest version of django-elasticsearch-dsl.
djangorestframework
Initial version of this package was written for djangorestframework 3.6.2.
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
Documentation is available on Read the Docs.
- :doc:`Dynamic serializer for Documents <basic_usage_examples>`.
- :doc:`Search filter backend <advanced_usage_examples>`.
- :doc:`Ordering filter backend <advanced_usage_examples>`.
- :doc:`Filtering filter backend <advanced_usage_examples>` (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. - :doc:`Geo-spatial filtering filter backend <advanced_usage_examples>` (the
following filters implemented:
geo_distance
,geo_polygon
andgeo_bounding_box
). - :doc:`Geo-spatial ordering filter backend <advanced_usage_examples>` (the
following filters implemented:
geo_distance
). - :doc:`Faceted search filter backend <advanced_usage_examples>`.
- :doc:`Post-filter filter backend <advanced_usage_examples>`.
- :doc:`Nested filtering filter backend <nested_fields_usage_examples>`.
- :doc:`Highlight backend <advanced_usage_examples>`.
- :doc:`Suggester filter backend <advanced_usage_examples>`.
- :doc:`Functional suggester filter backend <advanced_usage_examples>`.
- :doc:`Pagination (Page number and limit/offset pagination) <advanced_usage_examples>`.
- :doc:`Ids filter backend <advanced_usage_examples>`.
- :doc:`Multi match search filter backend <search_backends>`.
- :doc:`Simple search query search filter backend <search_backends>`.
- :doc:`More-like-this support (detail action) <more_like_this>`.
- :doc:`Global aggregations support <global_aggregations>`.
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', # ... )
Perhaps the easiest way to get acquainted with django-elasticsearch-dsl-drf
is to read the :doc:`quick start tutorial <quick_start>`.
See it as a guide of diving into integration of Elasticsearch with Django with very low knowledge entry level.
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
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
**************************
GPL 2.0/LGPL 2.1
For any issues contact me at the e-mail given in the Author section.
Artur Barseghyan <[email protected]>