django_elasticsearch_dsl_drf.filter_backends package

Submodules

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

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.

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_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'

django_elasticsearch_dsl_drf.filter_backends.suggester module

Suggesters backend.

It’s assumed, that fields you’re planning to query suggestions for have been properly indexed using fields.CompletionField.

Example:

>>> from django_elasticsearch_dsl import DocType, Index, fields
>>>
>>> from books.models import Publisher
>>>
>>> # Name of the Elasticsearch index
>>> PUBLISHER_INDEX = Index(PUBLISHER_INDEX_NAME)
>>> # See Elasticsearch Indices API reference for available settings
>>> PUBLISHER_INDEX.settings(
>>>     number_of_shards=1,
>>>     number_of_replicas=1
>>> )
>>>
>>> @PUBLISHER_INDEX.doc_type
>>> class PublisherDocument(DocType):
>>>     "Publisher Elasticsearch document."
>>>
>>>     id = fields.IntegerField(attr='id')
>>>
>>>     name = fields.StringField(
>>>         fields={
>>>             'raw': fields.StringField(analyzer='keyword'),
>>>             'suggest': fields.CompletionField(),
>>>         }
>>>     )
>>>
>>>     info = fields.StringField()
>>>
>>>     address = fields.StringField(
>>>         fields={
>>>             'raw': fields.StringField(analyzer='keyword')
>>>         }
>>>     )
>>>
>>>     city = fields.StringField(
>>>         fields={
>>>             'raw': fields.StringField(analyzer='keyword'),
>>>             'suggest': fields.CompletionField(),
>>>         }
>>>     )
>>>
>>>     state_province = fields.StringField(
>>>         fields={
>>>             'raw': fields.StringField(analyzer='keyword'),
>>>             'suggest': fields.CompletionField(),
>>>         }
>>>     )
>>>
>>>     country = fields.StringField(
>>>         fields={
>>>             'raw': fields.StringField(analyzer='keyword'),
>>>             'suggest': fields.CompletionField(),
>>>         }
>>>     )
>>>
>>>     website = fields.StringField()
>>>
>>>     class Meta(object):
>>>         "Meta options."
>>>
>>>         model = Publisher  # The model associate with this DocType
class django_elasticsearch_dsl_drf.filter_backends.suggester.SuggesterFilterBackend[source]

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

Suggester filter backend for Elasticsearch.

Suggestion functionality is exclusive. Once you have queried the SuggesterFilterBackend, the latter will transform your current search query into suggestion search query (which is very different). Therefore, always add it as the very last filter backend.

Example:

>>> from django_elasticsearch_dsl_drf.constants import (
>>>     SUGGESTER_TERM,
>>>     SUGGESTER_PHRASE,
>>>     SUGGESTER_COMPLETION,
>>> )
>>> from django_elasticsearch_dsl_drf.filter_backends import (
>>>     SuggesterFilterBackend
>>> )
>>> from django_elasticsearch_dsl_drf.views import BaseDocumentViewSet
>>>
>>> # Local PublisherDocument definition
>>> from .documents import PublisherDocument
>>>
>>> # Local PublisherDocument serializer
>>> from .serializers import PublisherDocumentSerializer
>>>
>>> class PublisherDocumentView(BaseDocumentViewSet):
>>>
>>>     document = PublisherDocument
>>>     serializer_class = PublisherDocumentSerializer
>>>     filter_backends = [
>>>         # ...
>>>         SuggesterFilterBackend,
>>>     ]
>>>     # Suggester fields
>>>     suggester_fields = {
>>>         'name_suggest': {
>>>             'field': 'name.suggest',
>>>             'suggesters': [
>>>                 SUGGESTER_TERM,
>>>                 SUGGESTER_PHRASE,
>>>                 SUGGESTER_COMPLETION,
>>>             ],
>>>         },
>>>         'city_suggest': {
>>>             'field': 'city.suggest',
>>>             'suggesters': [
>>>                 SUGGESTER_COMPLETION,
>>>             ],
>>>         },
>>>         'state_province_suggest': {
>>>             'field': 'state_province.suggest',
>>>             'suggesters': [
>>>                 SUGGESTER_COMPLETION,
>>>             ],
>>>         },
>>>         'country_suggest': {
>>>             'field': 'country.suggest',
>>>             'suggesters': [
>>>                 SUGGESTER_COMPLETION,
>>>             ],
>>>         },
>>>     }
classmethod apply_suggester_completion(suggester_name, queryset, options, value)[source]

Apply completion suggester.

Parameters:
  • suggester_name (str) –
  • queryset (elasticsearch_dsl.search.Search) – Original queryset.
  • options (dict) – Filter options.
  • value (str) – value to filter on.
Returns:

Modified queryset.

Return type:

elasticsearch_dsl.search.Search

classmethod apply_suggester_phrase(suggester_name, queryset, options, value)[source]

Apply phrase suggester.

Parameters:
  • suggester_name (str) –
  • queryset (elasticsearch_dsl.search.Search) – Original queryset.
  • options (dict) – Filter options.
  • value (str) – value to filter on.
Returns:

Modified queryset.

Return type:

elasticsearch_dsl.search.Search

classmethod apply_suggester_term(suggester_name, queryset, options, value)[source]

Apply term suggester.

Parameters:
  • suggester_name (str) –
  • queryset (elasticsearch_dsl.search.Search) – Original queryset.
  • options (dict) – Filter options.
  • value (str) – value to filter on.
Returns:

Modified 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_suggester_query_params(request, view)[source]

Get query params to be for suggestions.

Parameters:
  • request (rest_framework.request.Request) – Django REST framework request.
  • view (rest_framework.viewsets.ReadOnlyModelViewSet) – View.
Returns:

Request query params to filter on.

Return type:

dict

classmethod prepare_suggester_fields(view)[source]

Prepare filter fields.

Parameters:view (rest_framework.viewsets.ReadOnlyModelViewSet) –
Returns:Filtering options.
Return type:dict

Module contents

All filter backends.