====================
Django AnySearch DSL
====================
.. image:: https://github.com/django-anysearch/django-anysearch-dsl/actions/workflows/ci.yml/badge.svg
:target: https://github.com/django-anysearch/django-anysearch-dsl/actions/workflows/ci.yml
.. image:: https://codecov.io/gh/django-anysearch/django-anysearch-dsl/coverage.svg?branch=master
:target: https://codecov.io/gh/django-anysearch/django-anysearch-dsl
.. image:: https://badge.fury.io/py/django-anysearch-dsl.svg
:target: https://pypi.python.org/pypi/django-anysearch-dsl
.. image:: https://readthedocs.org/projects/django-anysearch-dsl/badge/?version=latest&style=flat
:target: https://django-anysearch-dsl.readthedocs.io/en/latest/
Django AnySearch DSL is a package that allows indexing of Django models in Elasticsearch/OpenSearch.
It is built as a thin wrapper around elasticsearch-dsl-py_ (and OpenSearch alternative).
You can view the full documentation at https://django-anysearch-dsl.readthedocs.io
.. _elasticsearch-dsl-py: https://github.com/elastic/elasticsearch-dsl-py
.. _django-elasticsearch-dsl: https://github.com/django-es/django-elasticsearch-dsl
.. _django-anysearch-dsl: https://github.com/django-anysearch/django-anysearch-dsl
.. _anysearch: https://github.com/barseghyanartur/anysearch
.. _changelog: https://github.com/django-anysearch/django-anysearch-dsl/blob/django-anysearch-dsl/CHANGELOG.rst
Manifest
--------
This project is a fork of django-elasticsearch-dsl_ with a single ultimate
purpose of supporting both Elasticsearch and OpenSearch. Compatibility is
achieved through anysearch_ which does necessary import replacements depending
on which one (Elasticsearch or OpenSearch) is chosen (similarly to what ``six``
package does to support both 2.x and 3.x branches of Python).
- Both ``elasticsearch`` and ``elasticsearch-dsl`` are optional
dependencies (as well as ``opensearch-py`` and ``opensearch-dsl``) and are
installed when instructed (like ``pip install django-anysearch-dsl[elasticsearch]``
or ``pip install django-anysearch-dsl[opensearch]``).
- ``anysearch`` is a required dependency.
The plan is to stay in sync with the django-elasticsearch-dsl_, so if you're
missing a feature or have a bugfix, please propose it in the upstream.
- Submit PRs here only if they are solely related to this package and not
the django-elasticsearch-dsl_.
- Do not propose code style changes or changes that contain reformatting
of the code (like ``black`` or ``isort`` fixes). Such things shall be
proposed in the django-elasticsearch-dsl_. Code changes to this package
are kept minimal, so that it's easier to stay in sync.
Versioning is kept in sync up to the ``build`` (in terms of Semantic
versioning ``major.minor[.build[.revision]``), so version 7.2.2.x of this
library would represent the version 7.2.2 of the upstream. All changes
are mentioned in the changelog_.
This library is a drop-in replacement, it does have the same namespace as
``django-elasticsearch-dsl``, thus you can't have both installed.
Due to complexities, no support for older versions of Elasticsearch (< 7.x)
is provided (and will never be).
Features
--------
- Based on elasticsearch-dsl-py_ so you can make queries with the Search_ class.
- Django signal receivers on save and delete for keeping Elasticsearch in sync.
- Management commands for creating, deleting, rebuilding and populating indices.
- Elasticsearch auto mapping from django models fields.
- Complex field type support (ObjectField, NestedField).
- Index fast using `parallel` indexing.
- Requirements
- Django >= 2.2
- Python 3.6, 3.7, 3.8, 3.9, 3.10 or 3.10.
**Elasticsearch Compatibility:**
The library is compatible with Elasticsearch 7.x, OpenSearch 1.x and OpenSearch 2.x.
.. code-block:: python
# Elasticsearch 7.x
elasticsearch-dsl>=7.0.0,<8.0.0
# OpenSearch 1.x
opensearch-dsl>=1.0,<2.0
# OpenSearch 2.x
opensearch-dsl>=2.0,<3.0
.. _Search: http://elasticsearch-dsl.readthedocs.io/en/stable/search_dsl.html
History
-------
7.1.4 (2020-07-05)
~~~~~~~~~~~~~~~~~~
* Configure Elasticsearch _id dynamically from document (#272)
* Use chain.from_iterable in for performance improvement (#278)
* Handle case where SimpleLazyObject being treated as an Iterable (#255)
* Camelcase default value in management command (#254)
* Various updates and fixup in docs (#250, #276)
* Start testing against Python 3.8 (#266)
7.1.1 (2019-12-26)
~~~~~~~~~~~~~~~~~~
* Adding detailed documentation and published to Read The Docs #222
* Resolve name resolution while delete, create index (#228)
* Added support for Django 3.0. (#230)
* Removing old Elasticsearc compatibility (#219)
* Drop StringField in favor of TextField.
7.1.0 (2019-10-29)
~~~~~~~~~~~~~~~~~~
* Support for Django `DecimalField` #141
* Indexing speedup by using `parallel` indexing. #213.
Now you can pass `--parallel` or set `ELASTICSEARCH_DSL_PARALLEL`
in your settings to get indexing speed boost while indexing
through management command.
* Fixing name resolution in management command #206
* Small documentation fixes. #196
7.0.0 (2019-08-11)
~~~~~~~~~~~~~~~~~~
* Support Elasticsearch 7.0 (See PR #176)
* Added order by to paginate queryset properly (See PR #153)
* Remove `standard` token filter from `README.md` and test files
* Various documentation fixes
6.4.2 (2019-07-26)
~~~~~~~~~~~~~~~~~~
* Fix document importing path
* Update readme
6.4.1 (2019-06-14)
~~~~~~~~~~~~~~~~~~
* The `DocType` import has changed to `Document`
6.4.0 (2019-06-01)
~~~~~~~~~~~~~~~~~~
* Support elasticsearch-dsl>6.3.0
* Class `Meta` has changed to class `Django` (See PR #136)
* Add `register_document` decorator to register a document (See PR #136)
* Additional Bug fixing and others
0.5.1 (2018-11-07)
~~~~~~~~~~~~~~~~~~
* Limit elastsearch-dsl to supported versions
0.5.0 (2018-04-22)
~~~~~~~~~~~~~~~~~~
* Add Support for Elasticsearch 6 thanks to HansAdema
Breaking Change:
~~~~~~~~~~~~~~~~
Django string fields now point to ES text field by default.
Nothing should change for ES 2.X but if you are using ES 5.X,
you may need to rebuild and/or update some of your documents.
0.4.5 (2018-04-22)
~~~~~~~~~~~~~~~~~~
* Fix prepare with related models when deleted (See PR #99)
* Fix unwanted calls to get_instances_from_related
* Fix for empty ArrayField (CBinyenya)
* Fix nested OneToOneField when related object doesn't exist (CBinyenya)
* Update elasticsearch-dsl minimal version
0.4.4 (2017-12-13)
~~~~~~~~~~~~~~~~~~
* Fix to_queryset with es 5.0/5.1
0.4.3 (2017-12-12)
~~~~~~~~~~~~~~~~~~
* Fix syncing of related objects when deleted
* Add django 2.0 support
0.4.2 (2017-11-27)
~~~~~~~~~~~~~~~~~~
* Convert lazy string to string before serialization
* Readme update (arielpontes)
0.4.1 (2017-10-17)
~~~~~~~~~~~~~~~~~~
* Update example app with get_instances_from_related
* Typo/grammar fixes
0.4.0 (2017-10-07)
~~~~~~~~~~~~~~~~~~
* Add a method on the Search class to return a django queryset from an es result
* Add a queryset_pagination option to DocType.Meta for allow the pagination of
big django querysets during the index populating
* Remove the call to iterator method for the django queryset
* Fix DocType inheritance. The DocType is store in the registry as a class and not anymore as an instance
0.3.0 (2017-10-01)
~~~~~~~~~~~~~~~~~~
* Add support for resynching ES documents if related models are updated (HansAdema)
* Better management for django FileField and ImageField
* Fix some errors in the doc (barseghyanartur, diwu1989)
0.2.0 (2017-07-02)
~~~~~~~~~~~~~~~~~~
* Replace simple model signals with easier to customise signal processors (barseghyanartur)
* Add options to disable automatic index refreshes (HansAdema)
* Support defining DocType indexes through Meta class (HansAdema)
* Add option to set default Index settings through Django config (HansAdema)
0.1.0 (2017-05-26)
~~~~~~~~~~~~~~~~~~
* First release on PyPI.