django_elasticsearch_dsl_drf.filter_backends.suggester package¶
Submodules¶
django_elasticsearch_dsl_drf.filter_backends.suggester.functional module¶
Functional 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.functional.
FunctionalSuggesterFilterBackend
[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
FunctionalSuggesterFilterBackend
, the latter will transform your current search query into another search query (altered). Therefore, always add it as the very last filter backend.Example:
>>> from django_elasticsearch_dsl_drf.constants import ( >>> FUNCTIONAL_SUGGESTER_COMPLETION_MATCH, >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> FUNCTIONAL_SUGGESTER_PHRASE_MATCH, >>> FUNCTIONAL_SUGGESTER_PHRASE_MATCH, >>> FUNCTIONAL_SUGGESTER_TERM_MATCH, >>> ) >>> from django_elasticsearch_dsl_drf.filter_backends import ( >>> FunctionalSuggesterFilterBackend >>> ) >>> from django_elasticsearch_dsl_drf.viewsets import DocumentViewSet >>> >>> # Local PublisherDocument definition >>> from .documents import PublisherDocument >>> >>> # Local PublisherDocument serializer >>> from .serializers import PublisherDocumentSerializer >>> >>> class PublisherDocumentView(DocumentViewSet): >>> >>> document = PublisherDocument >>> serializer_class = PublisherDocumentSerializer >>> filter_backends = [ >>> # ... >>> FunctionalSuggesterFilterBackend, >>> ] >>> # Suggester fields >>> suggester_fields = { >>> 'name_suggest': { >>> 'field': 'name.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_MATCH, >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> ], >>> }, >>> 'city_suggest': { >>> 'field': 'city.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> ], >>> }, >>> 'state_province_suggest': { >>> 'field': 'state_province.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_MATCH, >>> ], >>> }, >>> 'country_suggest': { >>> 'field': 'country.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> ], >>> }, >>> }
-
classmethod
apply_suggester_completion_match
(suggester_name, queryset, options, value)[source]¶ Apply completion suggester match.
This is effective when used with Ngram fields.
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_completion_prefix
(suggester_name, queryset, options, value)[source]¶ Apply completion suggester prefix.
This is effective when used with Keyword fields.
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
-
clean_queryset
(queryset)[source]¶ Clean the queryset.
- Remove aggregations.
- Remove highlight.
- Remove sorting options.
Parameters: queryset – Returns:
-
extract_field_name
(field_name)[source]¶ Extract field name.
For instance, “name.suggest” or “name.raw” becomes “name”.
Parameters: field_name – Returns: Return type: str
-
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
django_elasticsearch_dsl_drf.filter_backends.suggester.native 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.native.
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.viewsets import DocumentViewSet >>> >>> # 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
-
classmethod
Module contents¶
Suggester filtering backends.
-
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.viewsets import DocumentViewSet >>> >>> # 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
-
classmethod
-
class
django_elasticsearch_dsl_drf.filter_backends.suggester.
FunctionalSuggesterFilterBackend
[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
FunctionalSuggesterFilterBackend
, the latter will transform your current search query into another search query (altered). Therefore, always add it as the very last filter backend.Example:
>>> from django_elasticsearch_dsl_drf.constants import ( >>> FUNCTIONAL_SUGGESTER_COMPLETION_MATCH, >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> FUNCTIONAL_SUGGESTER_PHRASE_MATCH, >>> FUNCTIONAL_SUGGESTER_PHRASE_MATCH, >>> FUNCTIONAL_SUGGESTER_TERM_MATCH, >>> ) >>> from django_elasticsearch_dsl_drf.filter_backends import ( >>> FunctionalSuggesterFilterBackend >>> ) >>> from django_elasticsearch_dsl_drf.viewsets import DocumentViewSet >>> >>> # Local PublisherDocument definition >>> from .documents import PublisherDocument >>> >>> # Local PublisherDocument serializer >>> from .serializers import PublisherDocumentSerializer >>> >>> class PublisherDocumentView(DocumentViewSet): >>> >>> document = PublisherDocument >>> serializer_class = PublisherDocumentSerializer >>> filter_backends = [ >>> # ... >>> FunctionalSuggesterFilterBackend, >>> ] >>> # Suggester fields >>> suggester_fields = { >>> 'name_suggest': { >>> 'field': 'name.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_MATCH, >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> ], >>> }, >>> 'city_suggest': { >>> 'field': 'city.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> ], >>> }, >>> 'state_province_suggest': { >>> 'field': 'state_province.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_MATCH, >>> ], >>> }, >>> 'country_suggest': { >>> 'field': 'country.suggest', >>> 'suggesters': [ >>> FUNCTIONAL_SUGGESTER_COMPLETION_PREFIX, >>> ], >>> }, >>> }
-
classmethod
apply_suggester_completion_match
(suggester_name, queryset, options, value)[source]¶ Apply completion suggester match.
This is effective when used with Ngram fields.
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_completion_prefix
(suggester_name, queryset, options, value)[source]¶ Apply completion suggester prefix.
This is effective when used with Keyword fields.
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
-
clean_queryset
(queryset)[source]¶ Clean the queryset.
- Remove aggregations.
- Remove highlight.
- Remove sorting options.
Parameters: queryset – Returns:
-
extract_field_name
(field_name)[source]¶ Extract field name.
For instance, “name.suggest” or “name.raw” becomes “name”.
Parameters: field_name – Returns: Return type: str
-
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