你如何加速Haystack搜索驱动(使用 Whoosh 后端)分页的 Django 列表视图?
我有一个简单的 ListView,例如:
class PersonListView(ListView)
template_name = 'person-list.html'
paginated_by = 10
def get_queryset(self):
return Person.objects.all()
返回一个包含 3000 个结果的页面在我的本地主机上运行大约 1 秒。
然后我“插入”Haystack 以允许通过执行以下操作对名称进行全文搜索:
class PersonListView(ListView)
template_name = 'person-list.html'
paginated_by = 10
def get_queryset(self):
#return Person.objects.all()
return SearchQuerySet().models(models.Person)
我设置了适当的索引并运行manage.py rebuild_index
:
class PersonIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
nickname = indexes.CharField()
first_name = indexes.CharField()
middle_name = indexes.CharField()
last_name = indexes.CharField()
def get_model(self):
return models.Person
def index_queryset(self, using=None):
return self.get_model().objects.all()
但是,在此之后,相同的页面现在需要大约 15 秒才能运行......
我尝试使用django profiler,但我没有看到更改前后的查询时间有太大差异,并且运行时间最长的查询只需要一秒钟,这表明视图端存在一些导致所有查询结果的错误被迭代。
是什么导致 Haystack 运行缓慢?