我希望能够使用 django-haystack 对模型进行全文搜索。该模型使用 PointField 来存储坐标。我想根据距某个点的距离过滤搜索结果。 Haystack 可以做到这一点吗?有更好的方法吗?
from django.contrib.gis.db import models
class Listing(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
location = models.PointField()
最佳答案
听起来您希望用户在文本搜索中输入地理信息,例如地址或邮政编码。我就是这样做的,尽管我还不确定它是如何扩展的。我五分钟前刚刚完成这个。
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
这应该是一个良好的开始。希望这能为您指明正确的方向。
关于python - Haystack 可以通过 geodjango PointField 进行过滤吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365016/