這聽起來像你希望用戶輸入地理信息,如地址或郵編到文本搜索。這是我做到的,儘管我不確定它是如何縮放的。我剛剛在5分鐘前完成了這個。
You should create a custom search form從SearchForm或其他選項之一(對於我來說它是FacetedSearchForm)。覆蓋搜索方法。
首先將搜索字符串變成一個點。 http://code.google.com/p/geopy/wiki/GettingStarted
class MainSearchForm(FacetedSearchForm):
def search(self):
query = self.cleaned_data['q']
g = geocoders.Google()
place, (lat, lng) = g.geocode('%s' % query)
pnt = fromstr('POINT(%s %s)' % (lng, lat), srid=4326)
然後採取搜索查詢集,我用RelatedSearchQuerySet,因爲它允許您使用load_all_queryset()這是我的距離過濾。這是GeoDjango與GeoDjango Distance Queries救援。通過距離查詢,您可以選擇如何過濾距離小於,大於等。距離本身,無論您想要的單位。
sqs = RelatedSearchQuerySet().load_all()
sqs = sqs.load_all_queryset(Listing,
Listing.objects.filter(location__distance_lte=(pnt, D(mi=20))))
return sqs
這應該是一個堅實的開始。希望這可以指導你正確的方向。
更新:自Haystack 2.0開始,空間搜索已經實現,並且與geodjango領域的工作很好。 – agabel
Hi @ Agabel。你可以發佈任何代碼樣本,幫助解決Haystack 2.0和geodjango的問題嗎?謝謝! –