Как оптимизировать 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().

Вернуться на верх