加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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'),)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读