Metadata-Version: 2.1
Name: django-opensearch-dsl
Version: 0.1.1
Summary: Wrapper around opensearch-dsl-py for django models
Home-page: https://github.com/qcoumes/django-opensearch-dsl
Author: Quentin Coumes (Codoc)
Author-email: coumes.quentin@gmail.com
License: Apache Software License 2.0
Keywords: django elasticsearch elasticsearch-dsl opensearch opensearch-dsl
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.0
Classifier: Framework :: Django :: 2.1
Classifier: Framework :: Django :: 2.2
Classifier: Framework :: Django :: 3.0
Classifier: Framework :: Django :: 3.1
Classifier: Framework :: Django :: 3.2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Description-Content-Type: text/markdown
License-File: LICENSE

Django Opensearch DSL
=====================

[![PyPI Version](https://badge.fury.io/py/django-opensearch-dsl.svg)](https://badge.fury.io/py/django-opensearch-dsl)
[![Documentation Status](https://readthedocs.org/projects/django-opensearch-dsl/badge/?version=latest)](https://django-opensearch-dsl.readthedocs.io/en/latest/?badge=latest)
![Tests](https://github.com/Codoc-os/django-opensearch-dsl/workflows/Tests/badge.svg)
[![Python 3.6+](https://img.shields.io/badge/Python-3.6+-brightgreen.svg)](#)
[![Django 2.1+, 3.0+](https://img.shields.io/badge/Django-2.1+,%203.0+-brightgreen.svg)](#)
[![License Apache 2](https://img.shields.io/badge/license-Apache%202-brightgreen.svg)](https://github.com/Codoc-os/django-opensearch-dsl/blob/master/LICENSE)
[![codecov](https://codecov.io/gh/Codoc-os/django-opensearch-dsl/branch/master/graph/badge.svg)](https://codecov.io/gh/Codoc-os/django-opensearch-dsl)
[![CodeFactor](https://www.codefactor.io/repository/github/Codoc-os/django-opensearch-dsl/badge)](https://www.codefactor.io/repository/github/Codoc-os/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`](https://github.com/opensearch-project/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](https://django-opensearch-dsl.readthedocs.io.).

## Features

- Based on [`opensearch-dsl-py`](https://github.com/opensearch-project/opensearch-dsl-py) so you can make queries with
  the [`Search`](https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#the-search-object)
  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.0.0`
* `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:

```python
OPENSEARCH_DSL = {
    'default': {
        'hosts': 'localhost:9200'
    },
    'test': {
        'hosts': 'localhost:9201'
    },
}
```

`OPENSEARCH_DSL` is then passed
to [`opensearch_dsl_py.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters)
.

## Create Document Classes

To index instances of the following model :

```python
# 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`](/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.

```python
# 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.1.0 (2021-12-11)

* Migrated to **Opensearch**
* Drop some feature such as auto-syncing signals and related models
* Replace `search_index` management command with `opensearch`.

## 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 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.


