ES Facets in addition to results
This commit is contained in:
parent
04d6412f39
commit
e6b353e864
|
|
@ -46,6 +46,7 @@ class EstablishmentDocument(Document):
|
|||
'id': fields.IntegerField(attr='id'),
|
||||
'label': fields.ObjectField(attr='label_indexing',
|
||||
properties=OBJECT_FIELD_PROPERTIES),
|
||||
'index_name': fields.KeywordField(attr='value'),
|
||||
},
|
||||
multi=True)
|
||||
visible_tags = fields.ObjectField(
|
||||
|
|
|
|||
|
|
@ -4,13 +4,15 @@ from django_elasticsearch_dsl_drf import constants
|
|||
from django_elasticsearch_dsl_drf.filter_backends import (
|
||||
FilteringFilterBackend,
|
||||
GeoSpatialFilteringFilterBackend,
|
||||
DefaultOrderingFilterBackend,
|
||||
FacetedSearchFilterBackend,
|
||||
CompoundSearchFilterBackend,
|
||||
)
|
||||
from elasticsearch_dsl import TermsFacet, RangeFacet
|
||||
from django_elasticsearch_dsl_drf.viewsets import BaseDocumentViewSet
|
||||
from search_indexes import serializers, filters
|
||||
from search_indexes.documents import EstablishmentDocument, NewsDocument
|
||||
from search_indexes.documents.product import ProductDocument
|
||||
from utils.pagination import ProjectMobilePagination
|
||||
from utils.pagination import ESDocumentPagination
|
||||
|
||||
|
||||
class NewsDocumentViewSet(BaseDocumentViewSet):
|
||||
|
|
@ -18,15 +20,30 @@ class NewsDocumentViewSet(BaseDocumentViewSet):
|
|||
|
||||
document = NewsDocument
|
||||
lookup_field = 'slug'
|
||||
pagination_class = ProjectMobilePagination
|
||||
pagination_class = ESDocumentPagination
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
serializer_class = serializers.NewsDocumentSerializer
|
||||
|
||||
filter_backends = [
|
||||
filters.CustomSearchFilterBackend,
|
||||
FilteringFilterBackend,
|
||||
CompoundSearchFilterBackend,
|
||||
FacetedSearchFilterBackend,
|
||||
]
|
||||
|
||||
faceted_search_fields = {
|
||||
'works_at_weekday': {
|
||||
'field': 'works_at_weekday',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
},
|
||||
'state': {
|
||||
'field': 'state',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
}
|
||||
}
|
||||
|
||||
search_fields = {
|
||||
'title': {'fuzziness': 'auto:2,5',
|
||||
'boost': 3},
|
||||
|
|
@ -69,8 +86,7 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet):
|
|||
"""Establishment document ViewSet."""
|
||||
|
||||
document = EstablishmentDocument
|
||||
lookup_field = 'slug'
|
||||
pagination_class = ProjectMobilePagination
|
||||
pagination_class = ESDocumentPagination
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
serializer_class = serializers.EstablishmentDocumentSerializer
|
||||
|
||||
|
|
@ -83,9 +99,42 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet):
|
|||
FilteringFilterBackend,
|
||||
filters.CustomSearchFilterBackend,
|
||||
GeoSpatialFilteringFilterBackend,
|
||||
# DefaultOrderingFilterBackend,
|
||||
FacetedSearchFilterBackend,
|
||||
]
|
||||
|
||||
faceted_search_fields = {
|
||||
'works_at_weekday': {
|
||||
'field': 'works_at_weekday',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
},
|
||||
'toque_number': {
|
||||
'field': 'toque_number',
|
||||
'enabled': True,
|
||||
'facet': TermsFacet,
|
||||
},
|
||||
'works_at_noon': {
|
||||
'field': 'works_at_noon',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
},
|
||||
'works_evening': {
|
||||
'field': 'works_evening',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
},
|
||||
'works_now': {
|
||||
'field': 'works_now',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
},
|
||||
'tag': {
|
||||
'field': 'tags.index_name',
|
||||
'facet': TermsFacet,
|
||||
'enabled': True,
|
||||
}
|
||||
}
|
||||
|
||||
search_fields = {
|
||||
'name': {'fuzziness': 'auto:2,5',
|
||||
'boost': 4},
|
||||
|
|
@ -211,13 +260,15 @@ class ProductDocumentViewSet(BaseDocumentViewSet):
|
|||
"""Product document ViewSet."""
|
||||
|
||||
document = ProductDocument
|
||||
pagination_class = ProjectMobilePagination
|
||||
pagination_class = ESDocumentPagination
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
serializer_class = serializers.ProductDocumentSerializer
|
||||
|
||||
filter_backends = [
|
||||
FilteringFilterBackend,
|
||||
filters.CustomSearchFilterBackend,
|
||||
CompoundSearchFilterBackend,
|
||||
FacetedSearchFilterBackend,
|
||||
]
|
||||
|
||||
search_fields = {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ from base64 import b64encode
|
|||
from urllib import parse as urlparse
|
||||
|
||||
from django.conf import settings
|
||||
from rest_framework.pagination import PageNumberPagination, CursorPagination
|
||||
from rest_framework.pagination import CursorPagination
|
||||
from django_elasticsearch_dsl_drf.pagination import PageNumberPagination
|
||||
|
||||
|
||||
class ProjectPageNumberPagination(PageNumberPagination):
|
||||
|
|
@ -48,6 +49,23 @@ class ProjectMobilePagination(ProjectPageNumberPagination):
|
|||
return self.page.previous_page_number()
|
||||
|
||||
|
||||
class ESDocumentPagination(PageNumberPagination):
|
||||
"""Pagination class for ES results. (includes facets)"""
|
||||
page_size_query_param = 'page_size'
|
||||
|
||||
def get_next_link(self):
|
||||
"""Get next link method."""
|
||||
if not self.page.has_next():
|
||||
return None
|
||||
return self.page.next_page_number()
|
||||
|
||||
def get_previous_link(self):
|
||||
"""Get previous link method."""
|
||||
if not self.page.has_previous():
|
||||
return None
|
||||
return self.page.previous_page_number()
|
||||
|
||||
|
||||
class EstablishmentPortionPagination(ProjectMobilePagination):
|
||||
"""
|
||||
Pagination for app establishments with limit page size equal to 12
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user