django_elasticsearch_dsl_drf.filter_backends package

Submodules

django_elasticsearch_dsl_drf.filter_backends.highlight module

Highlight backend.

class django_elasticsearch_dsl_drf.filter_backends.highlight.HighlightBackend[source]

Bases: rest_framework.filters.BaseFilterBackend

Highlight backend.

Example:

>>> from django_elasticsearch_dsl_drf.filter_backends import (
>>>     HighlightBackend
>>> )
>>> from django_elasticsearch_dsl_drf.views import BaseDocumentViewSet
>>>
>>> # Local article document definition
>>> from .documents import ArticleDocument
>>>
>>> # Local article document serializer
>>> from .serializers import ArticleDocumentSerializer
>>>
>>> class ArticleDocumentView(BaseDocumentViewSet):
>>>
>>>     document = ArticleDocument
>>>     serializer_class = ArticleDocumentSerializer
>>>     filter_backends = [HighlightBackend,]
>>>     highlight_fields = {
>>>         'author.name': {
>>>             'enabled': False,
>>>             'options': {
>>>                 'fragment_size': 150,
>>>                 'number_of_fragments': 3
>>>             }
>>>         }
>>>         'title': {
>>>             'options': {
>>>                 'pre_tags' : ["<em>"],
>>>                 'post_tags' : ["</em>"]
>>>             },
>>>             'enabled': True,
>>>         },
>>>     }

Highlight make queries to be more heavy. That’s why by default all highlights are disabled and enabled only explicitly either in the filter options (enabled set to True) or via query params ?highlight=author.name&highlight=title.

filter_queryset(request, queryset, view)[source]

Filter the queryset.

Parameters:
  • request (rest_framework.request.Request) – Django REST framework request.
  • queryset (elasticsearch_dsl.search.Search) – Base queryset.
  • view (rest_framework.viewsets.ReadOnlyModelViewSet) – View.
Returns:

Updated queryset.

Return type:

elasticsearch_dsl.search.Search

get_highlight_query_params(request)[source]

Get highlight query params.

Parameters:request (rest_framework.request.Request) – Django REST framework request.
Returns:List of search query params.
Return type:list
highlight_param = 'highlight'
classmethod prepare_highlight_fields(view)[source]

Prepare faceted search fields.

Prepares the following structure:

>>> {
>>>     'author.name': {
>>>         'enabled': False,
>>>         'options': {
>>>             'fragment_size': 150,
>>>             'number_of_fragments': 3
>>>         }
>>>     }
>>>     'title': {
>>>         'options': {
>>>             'pre_tags' : ["<em>"],
>>>             'post_tags' : ["</em>"]
>>>         },
>>>         'enabled': True,
>>>     },
>>> }
Parameters:view (rest_framework.viewsets.ReadOnlyModelViewSet) –
Returns:Highlight fields options.
Return type:dict

django_elasticsearch_dsl_drf.filter_backends.mixins module

Mixins.

class django_elasticsearch_dsl_drf.filter_backends.mixins.FilterBackendMixin[source]

Bases: object

Filter backend mixin.

classmethod apply_filter(queryset, options=None, args=None, kwargs=None)[source]

Apply filter.

Parameters:
  • queryset
  • options
  • args
  • kwargs
Returns:

classmethod apply_query(queryset, options=None, args=None, kwargs=None)[source]

Apply query.

Parameters:
  • queryset
  • options
  • args
  • kwargs
Returns:

classmethod split_lookup_complex_value(value, maxsplit=-1)[source]

Split lookup complex value.

Parameters:
  • value (str) – Value to split.
  • maxsplit (int) – The maxsplit option of string.split.
Returns:

Lookup filter split into a list.

Return type:

list

classmethod split_lookup_filter(value, maxsplit=-1)[source]

Split lookup filter.

Parameters:
  • value (str) – Value to split.
  • maxsplit (int) – The maxsplit option of string.split.
Returns:

Lookup filter split into a list.

Return type:

list

classmethod split_lookup_value(value, maxsplit=-1)[source]

Split lookup value.

Parameters:
  • value (str) – Value to split.
  • maxsplit (int) – The maxsplit option of string.split.
Returns:

Lookup value split into a list.

Return type:

list

django_elasticsearch_dsl_drf.filter_backends.search module

Search backend.

class django_elasticsearch_dsl_drf.filter_backends.search.SearchFilterBackend[source]

Bases: rest_framework.filters.BaseFilterBackend, django_elasticsearch_dsl_drf.filter_backends.mixins.FilterBackendMixin

Search filter backend for Elasticsearch.

Example:

>>> from django_elasticsearch_dsl_drf.filter_backends import (
>>>     SearchFilterBackend
>>> )
>>> from django_elasticsearch_dsl_drf.views import BaseDocumentViewSet
>>>
>>> # Local article document definition
>>> from .documents import ArticleDocument
>>>
>>> # Local article document serializer
>>> from .serializers import ArticleDocumentSerializer
>>>
>>> class ArticleDocumentView(BaseDocumentViewSet):
>>>
>>>     document = ArticleDocument
>>>     serializer_class = ArticleDocumentSerializer
>>>     filter_backends = [SearchFilterBackend,]
>>>     search_fields = (
>>>         'title',
>>>         'content',
>>>     )
>>>     search_nested_fields = {
>>>         'state': ['name'],
>>>         'documents.author': ['title', 'description'],
>>>     }

Construct nested search.

We have to deal with two types of structures:

Type 1:

>>> search_nested_fields = {
>>>     'country': {
>>>         'path': 'country',
>>>         'fields': ['name'],
>>>     },
>>>     'city': {
>>>         'path': 'country.city',
>>>         'fields': ['name'],
>>>     },
>>> }

Type 2:

>>> search_nested_fields = {
>>>     'country': {
>>>         'path': 'country',
>>>         'fields': [{'name': {'boost': 2}}]
>>>     },
>>>     'city': {
>>>         'path': 'country.city',
>>>         'fields': [{'name': {'boost': 2}}]
>>>     },
>>> }
Parameters:
  • request (rest_framework.request.Request) – Django REST framework request.
  • queryset (elasticsearch_dsl.search.Search) – Base queryset.
  • view (rest_framework.viewsets.ReadOnlyModelViewSet) – View.
Returns:

Updated queryset.

Return type:

elasticsearch_dsl.search.Search

Construct search.

We have to deal with two types of structures:

Type 1:

>>> search_fields = (
>>>     'title',
>>>     'description',
>>>     'summary',
>>> )

Type 2:

>>> search_fields = {
>>>     'title': {'boost': 2},
>>>     'description': None,
>>>     'summary': None,
>>> }
Parameters:
  • request (rest_framework.request.Request) – Django REST framework request.
  • queryset (elasticsearch_dsl.search.Search) – Base queryset.
  • view (rest_framework.viewsets.ReadOnlyModelViewSet) – View.
Returns:

Updated queryset.

Return type:

elasticsearch_dsl.search.Search

filter_queryset(request, queryset, view)[source]

Filter the queryset.

Parameters:
  • request (rest_framework.request.Request) – Django REST framework request.
  • queryset (elasticsearch_dsl.search.Search) – Base queryset.
  • view (rest_framework.viewsets.ReadOnlyModelViewSet) – View.
Returns:

Updated queryset.

Return type:

elasticsearch_dsl.search.Search

get_coreschema_field(field)[source]
get_schema_fields(view)[source]
get_search_query_params(request)[source]

Get search query params.

Parameters:request (rest_framework.request.Request) – Django REST framework request.
Returns:List of search query params.
Return type:list
search_param = 'search'

Module contents

All filter backends.