Как оптимизировать Django oscars Search View?
Я использую Django oscar(2.1.1), и я хочу оптимизировать представление поиска Django Oscars по умолчанию, т.е. class ESProductSearchHandler(CoreESProductSearchHandler).
Я знаю, что используя select_related() и prefetch_related() я могу оптимизировать представления, но я не понимаю, какую конкретную функцию я должен переопределить, чтобы оптимизировать представление поиска Django-Oscars по умолчанию только для таблицы продуктов.
Я покопался в Django Oscars search App и нашел FacetedSearchView()
, но какой метод мне нужно перезаписать здесь? Я не могу увидеть никакой
get_queryset() здесь, тогда я посмотрел search_handlers.py
в модели каталога там я предполагаю, что мне нужно переопределить эту функцию
def get_search_queryset(self): sqs = super().get_search_queryset() if self.categories: for category in self.categories: sqs = sqs.filter_or(category=category.full_name) return sqs
и в facets.py
нашел вот это
def base_sqs():
"""
Return the base SearchQuerySet for Haystack searches.
"""
sqs = SearchQuerySet()
for facet in settings.OSCAR_SEARCH_FACETS['fields'].values():
options = facet.get('options', {})
sqs = sqs.facet(facet['field'], **options)
for facet in settings.OSCAR_SEARCH_FACETS['queries'].values():
for query in facet['queries']:
sqs = sqs.query_facet(facet['field'], query[1])
return sqs
- что такое фасет и как я могу использовать его для оптимизации поискового просмотра?
- Дайте мне знать, прав я или нет? И если да, то как я могу это оптимизировать?
Как вы можете видеть здесь в django-silk debug toolbar search view выполняет 668 запросов?
Пожалуйста, дайте предложения и рабочий пример (если возможно), чтобы я мог добиться того же и оптимизировать поведение по умолчанию.
Примечание: да, я использую Эластичный поиск и использую оскары ESProductSearchHandler().