我正在使用Haystack和Whoosh使用Geonames项目中的城市数据搜索自定义应用程序。
我只导入了少量 Geonames 城市数据(22917 条记录)。我想按城市人口排序结果,但我无法获得好的结果。
当我order_by
在 my 上使用时SearchQuerySet
,结果非常慢。它还针对“名称”字段而不是“人口”正确排序,所以我认为我可能只是做错了什么。
这是搜索索引:
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)),
)