我正在尝试用django-haystack索引一堆地址。我的搜索索引是:
class AddressIndex(indexes.SearchIndex, indexes.Indexable):
street = indexes.CharField(model_attr='street')
city = indexes.CharField(model_attr='city')
location = indexes.LocationField(null=True)
def prepare_location(self, obj):
try:
return obj.location.point
except AttributeError:
return None
def get_model(self):
return Address
searchindex当然有更多字段,但这就足够了。当我尝试通过运行./manage.py update_index -k4 -b100 -v2 location
(索引存储在位置应用程序中)来对此进行索引时,只要prepare_location
返回None,一切都会变得很好。一旦它返回一些东西(例如点0.000,0.000),我就会从Solr那里得到一个错误,提到一些不兼容的尺寸。
确切的错误是org.apache.solr.common.SolrException: com.spatial4j.core.exception.InvalidShapeException: incompatible dimension (2) and values (POINT (0.0000000000000000 0.0000000000000000)). Only 0 values specified
。我想“也许它不喜欢这一点”,并在point.x
和point.y
添加了0.0000000000000001,但错误保持不变(除了现在它提到了新的坐标)。
有人知道这里发生了什么吗?
我正在使用:
在安装了所有最新更新的Ubuntu 13.10上。
答案 0 :(得分:1)
显然django-haystack
本身并没有做一个特别重要的事情。它没有将GeoDjango Point转换为所需的" lat,lon" format,但只是将Point对象传递给XML文档。
所以不要这样做:
def prepare_location(self, obj):
try:
return obj.location.point
except AttributeError:
return None
需要这样做:
def prepare_location(self, obj):
try:
return "{lat},{lon}".format(lat=obj.location.point.y, obj.location.point.x)
except AttributeError:
return None
如果我只是read the documentation,那将会变得更加轻松......