我正在使用Django 1.8.5,haystack 2.4.1和elasticsearch 1.7。这个问题可能与this question重复,但问题在于弹性搜索2关于映射的根本变化,但问题的根源完全不同,因此我创建了一个新问题。
我想为我的模型添加基于地理位置的搜索。为此目的,这些是我所做的改变:
在我的可搜索模型中:
latitude = models.FloatField(blank=True, null=True)
longitude = models.FloatField(blank=True, null=True)
def get_location(self):
return Point(self.latitude or 1000, self.longitude or 1000)
在search_indexes.py中:
location = indexes.LocationField(model_attr='get_location')
通过运行./manage.py build_index
,我们希望更新映射。我检查了映射,但令人惊讶的是,位置字段已保存为string
而不是geo_point
。因此,我遇到了dwithin
过滤器的问题,无法完成工作。
我知道我可以通过直接查询弹性手动创建映射,但我希望haystack通过search_indexes.py
来完成。因此,干草堆有没有解决这个问题的方法?我需要尽快完成它。