Wrapper around opensearch-dsl-py for django models
Project description
Django Opensearch DSL
Django Opensearch DSL is a package that allows the indexing of Django models in opensearch. It is built as a thin
wrapper around opensearch-dsl-py
so you can use all the features developed by the opensearch-dsl
team.
You can view the full documentation at https://django-opensearch-dsl.readthedocs.io.
Features
- Based on
opensearch-dsl-py
so you can make queries with theSearch
object. - 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 using
parallel
indexing.
Requirements
Python>=3.6
django>=2.1
opensearch-dsl~=1.0.0
python-dateutil~=2.8.2
Installation and Configuration
The easiest way to install django-opensearch-dsl
is through pip
:
pip install django-opensearch-dsl
Then add django_opensearch_dsl
to your INSTALLED_APPS
settings.
You must then define OPENSEARCH_DSL
in 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_DSL
is then passed
to opensearch_dsl_py.connections.configure
.
Create Document Classes
To index instances of the following model :
# models.py
class Car(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 of django_opensearch_dsl.Document
containing the subclasses Index
(which define the index' settings) and Django
(which contains settings related to your django Model
). Finally,
register the class using registry.register_document()
decorator.
It is required to define Document
classes inside a file named documents.py
in your apps' directory.
# documents.py
from django_opensearch_dsl import Document
from django_opensearch_dsl.registries import registry
from .models import Car
@registry.register_document
class CarDocument(Document):
class Index:
name = 'cars' # Name of the Opensearch index
settings = { # 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 = False
class Django:
model = Car # The model associated with this Document
fields = [ # 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 = 5000
Changelog
0.3.0 (2022-06-22)
- Fixes internal links in documentation.
- Remove the need to declare a
TESTING
boolean insettings.py
.
0.2.0 (2022-01-13)
- Restore auto-sync feature (still undocumented - Contributed by David Guillot)
- Add support to Django 4.0 (Contributed by David Guillot)
- Remove some python2 leftovers (Contributed by David Guillot)
0.1.2 (2021-12-14)
- Fixed 'Search.validate()'
0.1.0 (2021-12-11)
- Migrated to Opensearch
- Drop some feature such as auto-syncing signals and related models
- Replace
search_index
management command withopensearch
.
0.1.0 (2021-12-11)
- Migrated to Opensearch
- Drop some feature such as auto-syncing signals and related models
- Replace
search_index
management command withopensearch
.
Before fork from django-elasticsearch-dsl
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 setELASTICSEARCH_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 fromREADME.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 toDocument
6.4.0 (2019-06-01)
- Support elasticsearch-dsl>6.3.0
- Class
Meta
has changed to classDjango
(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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for django-opensearch-dsl-0.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | b81e204781b963bd2367d88eabb5189f69c1e4ed848715b1f9ba14c1ffb06aa1 |
|
MD5 | eea32616f3b60deb071f6c270323fad7 |
|
BLAKE2b-256 | e3b7e24d98d5a43c4bc667b4147ae5142632d1ea3700e1cbf0b07e9cffda6a07 |