Skip to main content

A filtering system for Opensearch documents similar to django-filter

Project description

Document FilterSet

A filtering system for Opensearch documents similar to django-filter, but designed to work with Opensearch queries instead of Django ORM.

Installation

pip install django-opensearch-dsl-filtering

Features

  • Filter Opensearch documents using a familiar Django-like API
  • Generate Django forms for your filters automatically
  • Support for pagination and sorting
  • Various filter types: CharFilter, NumericFilter, DateFilter, BooleanFilter

Quick Start

Define a Document FilterSet

from django_opensearch_dsl import Document
from document_filterset import CharFilter, DateFilter, DocumentFilterSet, NumericFilter

# Assuming you have a Document class defined
class BookDocument(Document):
    # Your document definition here
    class Index:
        name = "books"
        
    class Django:
        model = Book
        fields = ["id"]

# Create a FilterSet for your document
class BookDocumentFilterSet(DocumentFilterSet):
    document = BookDocument
    
    # Define filters
    title = CharFilter(field_name="title", lookup_expr="match", label="Title")
    author = CharFilter(field_name="author", lookup_expr="match", label="Author")
    publication_date = DateFilter(field_name="publication_date", label="Publication Date")
    price = NumericFilter(field_name="price", label="Price")
    price_min = NumericFilter(field_name="price", lookup_expr="gte", label="Min Price")
    price_max = NumericFilter(field_name="price", lookup_expr="lte", label="Max Price")
    
    # Define sorting options
    SORT_CHOICES = [
        ("", "Default"),
        ("title", "Title (A-Z)"),
        ("-title", "Title (Z-A)"),
        ("price", "Price (Low to High)"),
        ("-price", "Price (High to Low)"),
    ]

Use the FilterSet in a View

from django.shortcuts import render

def book_search(request):
    # Create a filter set with the request data
    filter_set = BookDocumentFilterSet(data=request.GET)
    
    # Get the search results
    search = filter_set.search()
    results = search.execute()
    
    # Get the form for rendering in the template
    form = filter_set.get_form()
    
    return render(
        request,
        "books/search.html",
        {
            "form": form,
            "results": results,
        },
    )

Use the Form in a Template

<form method="get">
    {{ form.as_p }}
    <button type="submit">Search</button>
</form>

<div class="results">
    {% for result in results %}
        <div class="result">
            <h2>{{ result.title }}</h2>
            <p>Author: {{ result.author }}</p>
            <p>Price: ${{ result.price }}</p>
        </div>
    {% endfor %}
</div>

Available Filters

  • CharFilter: For text fields
  • NumericFilter: For numeric fields
  • DateFilter: For date fields
  • BooleanFilter: For boolean fields

Customizing Filters

Each filter can be customized with the following parameters:

  • field_name: The name of the field to filter on
  • lookup_expr: The lookup expression to use (e.g., "match", "term", "wildcard", "gt", "lt", etc.)
  • label: The label to use for the form field

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_opensearch_dsl_filtering-0.1.1.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file django_opensearch_dsl_filtering-0.1.1.tar.gz.

File metadata

File hashes

Hashes for django_opensearch_dsl_filtering-0.1.1.tar.gz
Algorithm Hash digest
SHA256 639f6d328ed44b9c4a6fdacd95f287cf1ec82c530a3d3e9e3c9efd60dc437e1a
MD5 8932839200279ad2780006869b79051d
BLAKE2b-256 173f51b321cfe0ba2572857e9f95d464aaa4982feaa88cc83f7fd33f16116ee4

See more details on using hashes here.

File details

Details for the file django_opensearch_dsl_filtering-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_opensearch_dsl_filtering-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dc46fcb77ce084bac0af2bd1183d7d39f6f5447b9ee0f121f13c063167dafcac
MD5 faf883ef2768d3be5a25f6fa11532000
BLAKE2b-256 878ffc5b5a5d3fdddadc31cf19c149923082eeb6b663c6dfba093781b113bbb5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page