Haystack定制分析仪

时间:2015-11-19 03:13:52

标签: python django elasticsearch django-haystack

我使用的是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的新手。

1 个答案:

答案 0 :(得分:0)

在查看索引映射"location":{"type":"string"}时, 它应该被映射如下:

 "location":{"type":"geo_point"}

实施此映射后,尝试各种选项来设置纬度和经度值