首页 > 解决方案 > 如何优化 Django oscars 搜索视图?

问题描述

我正在使用Django oscar(2.1.1),我想优化 Django Oscars 默认搜索视图,即class ESProductSearchHandler(CoreESProductSearchHandler).我知道使用 select_related() 和 prefetch_related() 我可以优化视图,但我不明白我将使用哪个特定功能必须重写才能优化产品表的默认 Django-Oscars 搜索视图。

我挖掘了 Django Oscars 搜索应用程序并找到了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 调试工具栏搜索视图中看到的那样,正在执行668次查询

请提供建议和一个工作示例(如果可能),以便我可以实现相同并优化默认行为。

注意:是的,我正在使用弹性搜索并使用 oscars ESProductSearchHandler()。

标签: djangodjango-modelsquery-optimizationdjango-ormdjango-oscar

解决方案


推荐阅读