我使用的是ubuntu 14.04,python 2.7,Django 1.8& Elasticsearch 2.4。
search_indexes.py
class NoteIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
location = indexes.LocationField()
def get_model(self):
return Craigslist
def prepare_location(self, obj):
# If you're just storing the floats...
return "%s,%s" % (obj.latitude, obj.longitude)
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.exclude(latitude__isnull=True).exclude(longitude__isnull=True)
我可以使用命令
重新索引./ manage.py rebuild_index
在reindex的同时,我得到了以下映射:
{"documents":{"mappings":{"modelresult":{"properties":{"django_ct":{"type":"string"},"django_id":{"type":"string"},"id":{"type":"string"},"location":{"type":"string"},"text":{"type":"string"}}}}}}
我在日志中遇到错误,如:
Caused by: [documents] QueryParsingException[failed to find geo_point field [location]]
因此,它会引发错误,因为位置字段不是一种' geo_point&#39 ;? 在我跟踪文档后,替代方法是返回Point(经度,纬度),但它会引发序列化错误。
如何在' geo_point'中重建带位置的索引类型?
请帮忙。我是Elastic Search的新手。
答案 0 :(得分:0)
在查看索引映射"location":{"type":"string"}
时,
它应该被映射如下:
"location":{"type":"geo_point"}
实施此映射后,尝试各种选项来设置纬度和经度值