我只输入了少量的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 ModelSearchFormfrom haystack.query import SearchquerySetfrom haystack.vIEws import SearchVIEw,search_vIEw_factorysqs = 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'),)总结
以上是内存溢出为你收集整理的django-haystack – 无法订购Haystack / Whoosh结果(而且速度非常慢)全部内容,希望文章能够帮你解决django-haystack – 无法订购Haystack / Whoosh结果(而且速度非常慢)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)