django-haystack-opensearch
An OpenSearch backend for django-haystack.
Documentation: https://django-haystack-opensearch.readthedocs.io
django-haystack-opensearch provides a drop-in replacement for Elasticsearch
backends, allowing you to use OpenSearch (versions 1.x through 3.x) as your
search engine with
django-haystack.
It uses the opensearch-py client library only, instead of the out-of-date
elasticsearch client library.
Core Features
- Full-Text Search with OpenSearch: Powerful full-text search capabilities with support for complex queries and relevance scoring.
- Faceting and Filtering: Support for field, date, and query facets. Efficient filtering on facet fields (requires
__exactsuffix). - Spatial/Geo Search: Geographic location search, distance-based queries, and bounding box searches.
- More Like This: Similarity search to find related documents.
- Highlighting and Spelling Suggestions: Highlight search terms in results and provide automatic spelling correction.
- Complete Haystack Compatibility: Supports all standard Haystack features including field boosting, stored fields, and multiple connections.
Requirements
- Python 3.11 or later
- Django 5.2 or later
- OpenSearch 1.x through 3.x
- django-haystack 3.3.0 or later
Quick Start
1. Installation
Install the package using pip:
pip install django_haystack_opensearch
Or using uv:
uv add django_haystack_opensearch
2. Configuration
Add haystack to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
# ...
"haystack",
]
Configure the Haystack connection:
HAYSTACK_CONNECTIONS = {
"default": {
"ENGINE": "django_haystack_opensearch.haystack.OpenSearchSearchEngine",
"URL": "http://localhost:9200",
"INDEX_NAME": "haystack",
},
}
3. Usage
Define your search indexes as usual. When filtering on facet fields, remember to use the __exact suffix:
from haystack.query import SearchQuerySet
# Filter by a facet field (requires __exact)
results = SearchQuerySet().filter(author__exact="John Doe")
Common Use Cases
- Adding Search to Django Applications: Quickly add powerful search functionality to any Django project.
- Migrating from Elasticsearch to OpenSearch: A drop-in replacement for existing Elasticsearch backends with no code changes required.
- Building Faceted Search Interfaces: Create complex filter interfaces with accurate facet counts.
Getting Help
- Check the Documentation for detailed guides and examples.
- Report bugs or request features on the GitHub Issues page.
- Explore the
sandbox/directory for a complete demonstration application.
Metadata
Release files for django-haystack-opensearch 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_haystack_opensearch-1.0.0.tar.gz | 94.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_haystack_opensearch-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 198.4 kB
Release files / django_haystack_opensearch-1.0.0.tar.gz
| Download URL | django_haystack_opensearch-1.0.0.tar.gz |
|---|---|
| Size | 94.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
95815cf057da071d14a0cbac99dde98b5a1a1f39979a245bdab1833cd6253ff5
|
|
BLAKE2b-256 checksum How to use checksums |
794e4eb17f072c492d2524166629e2af6e8beb18ebfd1c1f20b71c3c4dabf10d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.10
|
Release files / django_haystack_opensearch-1.0.0-py3-none-any.whl
| Download URL | django_haystack_opensearch-1.0.0-py3-none-any.whl |
|---|---|
| Size | 103.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
942256a8d7a645494d520f6346350f489390fb49e2074e71c9602b1296dd17e3
|
|
BLAKE2b-256 checksum How to use checksums |
688712f74217b8f04e789a6f7dda2fa69ff77c9b2b78f088fb01ff84bef1cb83
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.10
|