Product ES index #2

This commit is contained in:
Kuroshini 2019-10-16 14:11:07 +03:00
parent a3b944ed1e
commit 692f4ba3ab
3 changed files with 54 additions and 48 deletions

View File

@ -1,9 +1,11 @@
from search_indexes.documents.establishment import EstablishmentDocument from search_indexes.documents.establishment import EstablishmentDocument
from search_indexes.documents.news import NewsDocument from search_indexes.documents.news import NewsDocument
from search_indexes.documents.product import ProductDocument
# todo: make signal to update documents on related fields # todo: make signal to update documents on related fields
__all__ = [ __all__ = [
'EstablishmentDocument', 'EstablishmentDocument',
'NewsDocument', 'NewsDocument',
'ProductDocument',
] ]

View File

@ -5,53 +5,21 @@ from search_indexes.utils import OBJECT_FIELD_PROPERTIES
from product import models from product import models
ProductIndex = Index(settings.ELASTICSEARCH_INDEX_NAMES.get(__name__, 'product')) ProductIndex = Index(settings.ELASTICSEARCH_INDEX_NAMES.get(__name__, 'product'))
ProductIndex.settings(number_of_shards=1, number_of_replicas=1) ProductIndex.settings(number_of_shards=1, number_of_replicas=1, mapping={'total_fields':{'limit': 3000}})
@ProductIndex.doc_type @ProductIndex.doc_type
class ProductDocument(Document): class ProductDocument(Document):
"""Product document.""" """Product document."""
@staticmethod
def _get_standard_properties():
return {
'name': fields.KeywordField(),
'standard_type': fields.IntegerField(),
'coordinates': fields.GeoPointField(),
}
@staticmethod
def _get_country_properties():
return {
'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES),
'code': fields.KeywordField(),
}
@staticmethod
def _get_tags_properties():
return {
'label': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'value': fields.KeywordField(),
'category': fields.ObjectField(properties={
'label': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'public': fields.BooleanField(),
'index_name': fields.KeywordField(),
'value_type': fields.KeywordField(),
'country': fields.ObjectField(properties=ProductDocument._get_country_properties()),
}),
}
description = fields.ObjectField(attr='description_indexing', description = fields.ObjectField(attr='description_indexing',
properties=OBJECT_FIELD_PROPERTIES) properties=OBJECT_FIELD_PROPERTIES)
product_type = fields.ObjectField(properies={ product_type = fields.ObjectField(properties={
'id': fields.IntegerField(), 'id': fields.IntegerField(),
'name': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES), 'name': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'index_name': fields.KeywordField(), 'index_name': fields.KeywordField(),
'use_subtypes': fields.BooleanField(), 'use_subtypes': fields.BooleanField(),
}) })
subtypes = fields.ObjectField( subtypes = fields.ObjectField(
properties={ properties={
'name': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES), 'name': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
@ -59,41 +27,77 @@ class ProductDocument(Document):
}, },
multi=True multi=True
) )
# TODO establishment
wine_region = fields.ObjectField(properties={ wine_region = fields.ObjectField(properties={
'name': fields.KeywordField(), 'name': fields.KeywordField(),
'country': fields.ObjectField(properties=_get_country_properties()), 'country': fields.ObjectField(properties={
'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES),
'code': fields.KeywordField(),
}),
'coordinates': fields.GeoPointField(), 'coordinates': fields.GeoPointField(),
'description': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES), 'description': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
}) })
wine_sub_region = fields.ObjectField(properties={'name': fields.KeywordField()}) wine_sub_region = fields.ObjectField(properties={'name': fields.KeywordField()})
classifications = fields.ObjectField( # TODO classifications = fields.ObjectField( # TODO
properties={ properties={
'classification_type': fields.ObjectField(properties={}), 'classification_type': fields.ObjectField(properties={}),
'standard': fields.ObjectField(properties=_get_standard_properties()), 'standard': fields.ObjectField(properties={
'name': fields.KeywordField(),
'standard_type': fields.IntegerField(),
'coordinates': fields.GeoPointField(),
}),
'tags': fields.ObjectField( 'tags': fields.ObjectField(
properties=_get_tags_properties(), properties={
'label': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'value': fields.KeywordField(),
'category': fields.ObjectField(properties={
'label': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'public': fields.BooleanField(),
'index_name': fields.KeywordField(),
'value_type': fields.KeywordField(),
'country': fields.ObjectField(properties={
'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES),
'code': fields.KeywordField(),
}),
}),
},
multi=True multi=True
), ),
}, },
multi=True multi=True
) )
standards = fields.ObjectField( standards = fields.ObjectField(
properties=_get_standard_properties(), properties={
'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES),
'code': fields.KeywordField(),
},
multi=True multi=True
) )
wine_village = fields.ObjectField(properties={ wine_village = fields.ObjectField(properties={
'name': fields.KeywordField(), 'name': fields.KeywordField(),
}) })
tags = fields.ObjectField( tags = fields.ObjectField(
properties=_get_tags_properties(), properties={
'label': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'value': fields.KeywordField(),
'category': fields.ObjectField(properties={
'label': fields.ObjectField(properties=OBJECT_FIELD_PROPERTIES),
'public': fields.BooleanField(),
'index_name': fields.KeywordField(),
'value_type': fields.KeywordField(),
'country': fields.ObjectField(properties={
'id': fields.IntegerField(),
'name': fields.ObjectField(attr='name_indexing',
properties=OBJECT_FIELD_PROPERTIES),
'code': fields.KeywordField(),
}),
}),
},
multi=True multi=True
) )

View File

@ -8,7 +8,7 @@ router = routers.SimpleRouter()
router.register(r'establishments', views.EstablishmentDocumentViewSet, basename='establishment') router.register(r'establishments', views.EstablishmentDocumentViewSet, basename='establishment')
router.register(r'mobile/establishments', views.EstablishmentDocumentViewSet, basename='establishment-mobile') router.register(r'mobile/establishments', views.EstablishmentDocumentViewSet, basename='establishment-mobile')
router.register(r'news', views.NewsDocumentViewSet, basename='news') router.register(r'news', views.NewsDocumentViewSet, basename='news')
router.register(r'product', views.ProductDocumentViewSet, basename='news') router.register(r'product', views.ProductDocumentViewSet, basename='product')
urlpatterns = router.urls urlpatterns = router.urls