django-haystack – 无法订购Haystack / Whoosh结果(而且速度非
发布时间:2020-12-20 13:29:17 所属栏目:Python 来源:网络整理
导读:我正在使用 Haystack和 Whoosh来搜索来自 Geonames项目的城市数据的自定义应用程序. 我只输入了少量的Geonames城市数据(22917条记录).我想根据一个城市的人口来订购结果,但我很难取得好成绩. 当我在SearchQuerySet上使用order_by时,结果非常慢.它还对“名称
我正在使用
Haystack和
Whoosh来搜索来自
Geonames项目的城市数据的自定义应用程序.
我只输入了少量的Geonames城市数据(22917条记录).我想根据一个城市的人口来订购结果,但我很难取得好成绩. 当我在SearchQuerySet上使用order_by时,结果非常慢.它还对“名称”字段进行了正确的排序,但不是“人口”,因此我认为我可能只是做错了. 这是搜索索引: class EntryIndex(indexes.SearchIndex,indexes.Indexable): text = indexes.CharField(document=True,use_template=True) name = indexes.CharField(indexed=False,model_attr='ascii_name') population = indexes.CharField(indexed=False,model_attr='population') django_id = indexes.CharField(indexed=False,model_attr='id') def get_model(self): return Entry def index_queryset(self): return self.get_model().objects.all() 这是模板: {{ object.ascii_name }} {{ object.alternate_names }} {{ object.country.name }} {{ object.country.iso }} {{ object.admin1_division.ascii_name }} {{ object.admin1_division.name }} {{ object.admin1_division.code }} {{ object.admin2_division.ascii_name }} {{ object.admin2_division.name }} 这是相关的视图代码: query = request.GET.get('q','') results = SearchQuerySet().models(Entry).auto_query(query).order_by('population') 当我从查询中取出order_by时,它会在不到一秒的时间内返回.有了它,它需要大约10秒钟才能完成,结果不是按人口排序的.按名称排序有效,但也需要约10秒. 注意:我也尝试使用内置的Haystack搜索视图,当我尝试按人口排序时,它非常慢: qs = SearchQuerySet().order_by('-population') urlpatterns = patterns('',... url(r'^demo2/$',SearchView(searchqueryset=qs)),) 解决方法
我做的几乎是一样的,订购对我来说工作快速而正确.
你做的唯一不同的是: query = request.GET.get('q','') results = SearchQuerySet().models(Entry).auto_query(query).order_by('population') 由于您指定了一个请求,我假设您已经创建了自己的视图.您不应该需要自定义视图.我在urls.py中实现了这个: from haystack.forms import ModelSearchForm from haystack.query import SearchQuerySet from haystack.views import SearchView,search_view_factory sqs = SearchQuerySet().models(MyModel).order_by('-weight') urlpatterns += patterns('',url(r'^search/$',search_view_factory( view_class=SearchView,template='search/search.html',searchqueryset=sqs,form_class=ModelSearchForm ),name='search'),) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |