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'),
|
'id': fields.IntegerField(attr='id'),
|
||||||
'label': fields.ObjectField(attr='label_indexing',
|
'label': fields.ObjectField(attr='label_indexing',
|
||||||
properties=OBJECT_FIELD_PROPERTIES),
|
properties=OBJECT_FIELD_PROPERTIES),
|
||||||
|
'index_name': fields.KeywordField(attr='value'),
|
||||||
},
|
},
|
||||||
multi=True)
|
multi=True)
|
||||||
visible_tags = fields.ObjectField(
|
visible_tags = fields.ObjectField(
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,15 @@ from django_elasticsearch_dsl_drf import constants
|
||||||
from django_elasticsearch_dsl_drf.filter_backends import (
|
from django_elasticsearch_dsl_drf.filter_backends import (
|
||||||
FilteringFilterBackend,
|
FilteringFilterBackend,
|
||||||
GeoSpatialFilteringFilterBackend,
|
GeoSpatialFilteringFilterBackend,
|
||||||
DefaultOrderingFilterBackend,
|
FacetedSearchFilterBackend,
|
||||||
|
CompoundSearchFilterBackend,
|
||||||
)
|
)
|
||||||
|
from elasticsearch_dsl import TermsFacet, RangeFacet
|
||||||
from django_elasticsearch_dsl_drf.viewsets import BaseDocumentViewSet
|
from django_elasticsearch_dsl_drf.viewsets import BaseDocumentViewSet
|
||||||
from search_indexes import serializers, filters
|
from search_indexes import serializers, filters
|
||||||
from search_indexes.documents import EstablishmentDocument, NewsDocument
|
from search_indexes.documents import EstablishmentDocument, NewsDocument
|
||||||
from search_indexes.documents.product import ProductDocument
|
from search_indexes.documents.product import ProductDocument
|
||||||
from utils.pagination import ProjectMobilePagination
|
from utils.pagination import ESDocumentPagination
|
||||||
|
|
||||||
|
|
||||||
class NewsDocumentViewSet(BaseDocumentViewSet):
|
class NewsDocumentViewSet(BaseDocumentViewSet):
|
||||||
|
|
@ -18,15 +20,30 @@ class NewsDocumentViewSet(BaseDocumentViewSet):
|
||||||
|
|
||||||
document = NewsDocument
|
document = NewsDocument
|
||||||
lookup_field = 'slug'
|
lookup_field = 'slug'
|
||||||
pagination_class = ProjectMobilePagination
|
pagination_class = ESDocumentPagination
|
||||||
permission_classes = (permissions.AllowAny,)
|
permission_classes = (permissions.AllowAny,)
|
||||||
serializer_class = serializers.NewsDocumentSerializer
|
serializer_class = serializers.NewsDocumentSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = [
|
||||||
filters.CustomSearchFilterBackend,
|
filters.CustomSearchFilterBackend,
|
||||||
FilteringFilterBackend,
|
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 = {
|
search_fields = {
|
||||||
'title': {'fuzziness': 'auto:2,5',
|
'title': {'fuzziness': 'auto:2,5',
|
||||||
'boost': 3},
|
'boost': 3},
|
||||||
|
|
@ -69,8 +86,7 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet):
|
||||||
"""Establishment document ViewSet."""
|
"""Establishment document ViewSet."""
|
||||||
|
|
||||||
document = EstablishmentDocument
|
document = EstablishmentDocument
|
||||||
lookup_field = 'slug'
|
pagination_class = ESDocumentPagination
|
||||||
pagination_class = ProjectMobilePagination
|
|
||||||
permission_classes = (permissions.AllowAny,)
|
permission_classes = (permissions.AllowAny,)
|
||||||
serializer_class = serializers.EstablishmentDocumentSerializer
|
serializer_class = serializers.EstablishmentDocumentSerializer
|
||||||
|
|
||||||
|
|
@ -83,9 +99,42 @@ class EstablishmentDocumentViewSet(BaseDocumentViewSet):
|
||||||
FilteringFilterBackend,
|
FilteringFilterBackend,
|
||||||
filters.CustomSearchFilterBackend,
|
filters.CustomSearchFilterBackend,
|
||||||
GeoSpatialFilteringFilterBackend,
|
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 = {
|
search_fields = {
|
||||||
'name': {'fuzziness': 'auto:2,5',
|
'name': {'fuzziness': 'auto:2,5',
|
||||||
'boost': 4},
|
'boost': 4},
|
||||||
|
|
@ -211,13 +260,15 @@ class ProductDocumentViewSet(BaseDocumentViewSet):
|
||||||
"""Product document ViewSet."""
|
"""Product document ViewSet."""
|
||||||
|
|
||||||
document = ProductDocument
|
document = ProductDocument
|
||||||
pagination_class = ProjectMobilePagination
|
pagination_class = ESDocumentPagination
|
||||||
permission_classes = (permissions.AllowAny,)
|
permission_classes = (permissions.AllowAny,)
|
||||||
serializer_class = serializers.ProductDocumentSerializer
|
serializer_class = serializers.ProductDocumentSerializer
|
||||||
|
|
||||||
filter_backends = [
|
filter_backends = [
|
||||||
FilteringFilterBackend,
|
FilteringFilterBackend,
|
||||||
filters.CustomSearchFilterBackend,
|
filters.CustomSearchFilterBackend,
|
||||||
|
CompoundSearchFilterBackend,
|
||||||
|
FacetedSearchFilterBackend,
|
||||||
]
|
]
|
||||||
|
|
||||||
search_fields = {
|
search_fields = {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ from base64 import b64encode
|
||||||
from urllib import parse as urlparse
|
from urllib import parse as urlparse
|
||||||
|
|
||||||
from django.conf import settings
|
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):
|
class ProjectPageNumberPagination(PageNumberPagination):
|
||||||
|
|
@ -48,6 +49,23 @@ class ProjectMobilePagination(ProjectPageNumberPagination):
|
||||||
return self.page.previous_page_number()
|
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):
|
class EstablishmentPortionPagination(ProjectMobilePagination):
|
||||||
"""
|
"""
|
||||||
Pagination for app establishments with limit page size equal to 12
|
Pagination for app establishments with limit page size equal to 12
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user