django-haystack – 无法订购HaystackWhoosh结果(而且速度非常慢)

django-haystack – 无法订购HaystackWhoosh结果(而且速度非常慢),第1张

概述我正在使用 Haystack和 Whoosh来搜索来自 Geonames项目的城市数据的自定义应用程序. 我只输入了少量的Geonames城市数据(22917条记录).我想根据一个城市的人口来订购结果,但我很难取得好成绩. 当我在SearchQuerySet上使用order_by时,结果非常慢.它还对“名称”字段进行了正确的排序,但不是“人口”,因此我认为我可能只是做错了. 这是搜索索引: cla 我正在使用 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 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结果(而且速度非常慢)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1196656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存