我使用Haystack和Whoosh从Geonames项目中使用城市数据搜索自定义应用程序。无法订购Haystack/Whoosh结果(而且速度非常慢)
我只有进口国地名城市数据(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秒。
注:我也试图与内置的草垛搜索视图,当我试图通过人口订购这是非常缓慢:
qs = SearchQuerySet().order_by('-population')
urlpatterns = patterns('',
...
url(r'^demo2/$', SearchView(searchqueryset=qs)),
)