Package: django-opensearch-dsl
Django Opensearch DSLDjango Opensearch DSLis a package that allows the indexing of Django models in opensearch. It is built as a thin
wrapper aroundopensearch-pyso you can use all the features developed by theopensearch-pyteam.You can view the full documentation
athttps://django-opensearch-dsl.readthedocs.io.FeaturesBased onopensearch-pyso you can make queries with
theSearchobject.Management commands for creating, deleting, and populating indices and documents.Opensearch auto mapping from Django models fields.Complex field type support (ObjectField,NestedField).Index fast usingparallelindexing.Requirementsdjango-opensearch-dslonly support the supported version of each dependency (mainstream & lts).Python(supported versions)Django(supported versions)opensearch-py(compatibility matrix)Installation and ConfigurationThe easiest way to installdjango-opensearch-dslis throughpip:pip install django-opensearch-dslThen adddjango_opensearch_dslto yourINSTALLED_APPSsettings.You must then defineOPENSEARCH_DSLin your Django settings.For example:OPENSEARCH_DSL={'default':{'hosts':'localhost:9200'},'secure':{'hosts':[{"scheme":"https","host":"192.30.255.112","port":9201}],'http_auth':("admin","password"),'timeout':120,},}OPENSEARCH_DSLis then passed
toopensearchpy.connection.connections.configure.Create Document ClassesTo index instances of the following model :# models.pyclassCar(models.Model):name=models.CharField()color=models.CharField()description=models.TextField()type=models.IntegerField(choices=[(1,"Sedan"),(2,"Truck"),(4,"SUV"),])First create a subclass ofdjango_opensearch_dsl.Documentcontaining the subclassesIndex(which define the index' settings) andDjango(which contains settings related to your djangoModel). Finally,
register the class usingregistry.register_document()decorator.It is required to defineDocumentclasses inside a file nameddocuments.pyin your apps' directory.# documents.pyfromdjango_opensearch_dslimportDocumentfromdjango_opensearch_dsl.registriesimportregistryfrom.modelsimportCar@registry.register_documentclassCarDocument(Document):classIndex:name='cars'# Name of the Opensearch indexsettings={# See Opensearch Indices API reference for available settings'number_of_shards':1,'number_of_replicas':0}# Configure how the index should be refreshed after an update.# See Opensearch documentation for supported options.# This per-Document setting overrides settings.OPENSEARCH_DSL_AUTO_REFRESH.auto_refresh=FalseclassDjango:model=Car# The model associated with this Documentfields=[# The fields of the model you want to be indexed in Opensearch'name','color','description','type',]# Paginate the django queryset used to populate the index with the specified size# This per-Document setting overrides settings.OPENSEARCH_DSL_QUERYSET_PAGINATION.queryset_pagination=5000Changelog0.5.2 (2024-01-11)Add the missing parameterfield_value_to_ignore=Nonetodjango_opensearch_dsl.fields.ListField.get_value_from_instance(#47,
Contributed byghkdxofla - Taelim Hwang (Limy)).0.5.1 (2023-05-18)Change references fromopensearch-dsl-pytoopensearch-py.This follow the deprecation notice on theopensearch-dsl-pyproject. Its features are now directly
included inopensearch-py.(#33, Contributed byJacob Kausler).0.5.0 (2022-11-19)get_indexing_queryset()now order unordered QuerySet by their PK.
(#29, Contributed byCédric Raud).keep_orderargument ofdjango_opensearch_dsl.search.Search.to_querysetnow default toTrueto be in line with the documentation (#27).0.4.1 (2022-08-16)Document.update()method now take an optionalusingargument allowing to specify an alternate
OpenSearch connection defined inOPENSEARCH_DSL.Fix related document automatic indexation and deletion
(Contributed byColin Seifer).Addpre-deleteback intoBaseSignalProcessor.handle_m2m_changed()to  properly update the
index on M2M interactions (Contributed byColin Seifer).0.4.0 (2022-08-04)Add support for related models. SeeDocument ClassesandDocument Field Referencefor more information
(Contributed byColin Seifer).django-opensearch-dslnow only tests supported version of Python and Django (mainstream and LTS).
This choice is made to:Speed up development.Speed up tests.Reduce actions on github.Encourage people to update their stack to supported (thus safer) versions.Drop support for Python 3.6.Drop support for Django 2.1, 2.2, 3.1.Now supports Django 4.1.Now supportsopensearch-dsl>=2.0 <3.00.0.3.0 (2022-06-22)Fixes internal links in documentation.Remove the need to declare aTESTINGboolean insettings.py.0.2.0 (2022-01-13)Restore auto-sync feature (still undocumented - Contributed byDavid Guillot)Add support to Django 4.0 (Contributed byDavid Guillot)Remove some python2 leftovers (Contributed byDavid Guillot)0.1.2 (2021-12-14)Fixed 'Search.validate()'0.1.0 (2021-12-11)Migrated toOpensearchDrop some feature such as auto-syncing signals and related modelsReplacesearch_indexmanagement command withopensearch.0.1.0 (2021-12-11)Migrated toOpensearchDrop some feature such as auto-syncing signals and related modelsReplacesearch_indexmanagement command withopensearch.Before fork fromdjango-elasticsearch-dsl7.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 #222Resolve 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 DjangoDecimalField#141Indexing speedup by usingparallelindexing. #213. Now you can pass--parallelor setELASTICSEARCH_DSL_PARALLELin your settings to get indexing speed boost while indexing through management command.Fixing name resolution in management command #206Small documentation fixes. #1967.0.0 (2019-08-11)Support Elasticsearch 7.0 (See PR #176)Added order by to paginate queryset properly (See PR #153)Removestandardtoken filter fromREADME.mdand test filesVarious documentation fixes6.4.2 (2019-07-26)Fix document importing pathUpdate readme6.4.1 (2019-06-14)TheDocTypeimport has changed toDocument6.4.0 (2019-06-01)Support elasticsearch-dsl>6.3.0ClassMetahas changed to classDjango(See PR #136)Addregister_documentdecorator to register a document (See PR #136)Additional Bug fixing and others0.5.1 (2018-11-07)Limit elastsearch-dsl to supported versions0.5.0 (2018-04-22)Add Support for Elasticsearch 6 thanks to HansAdemaBreaking 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_relatedFix for empty ArrayField (CBinyenya)Fix nested OneToOneField when related object doesn't exist (CBinyenya)Update elasticsearch-dsl minimal version0.4.4 (2017-12-13)Fix to_queryset with es 5.0/5.10.4.3 (2017-12-12)Fix syncing of related objects when deletedAdd django 2.0 support0.4.2 (2017-11-27)Convert lazy string to string before serializationReadme update (arielpontes)0.4.1 (2017-10-17)Update example app with get_instances_from_relatedTypo/grammar fixes0.4.0 (2017-10-07)Add a method on the Search class to return a django queryset from an es resultAdd a queryset_pagination option to DocType.Meta for allow the pagination of big django querysets during the index
populatingRemove the call to iterator method for the django querysetFix DocType inheritance. The DocType is store in the registry as a class and not anymore as an instance0.3.0 (2017-10-01)Add support for resynching ES documents if related models are updated (HansAdema)Better management for django FileField and ImageFieldFix 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.