对于使用haystack / solr的空间搜索,我是否必须同时导入django.contrib.gis.geos.Point和haystack.utils.geo.Point?

时间:2014-02-05 07:33:38

标签: python django solr spatial django-haystack

我使用haystack 2.1.0和solr按名称搜索餐馆,它的确有效。现在尝试添加空间搜索。

已按照https://django-haystack.readthedocs.org/en/latest/spatial.html上的说明操作。该页面上的以下声明,“Haystack更喜欢使用Point对象,它们位于django.contrib.gis.geos.Point中,但可以从haystack.utils.geo.Point中方便地导入。”给我的印象是只需导入haystack.utils.geo.Point即可。然而,这对我不起作用。

以下是我认为与此问题相关的代码:

Model.py

from haystack.utils.geo import Point

class Restaurant(models.Model):
    name = models.CharField(max_length=250)
    latitude = models.FloatField()
    longitude = models.FloatField()

    def get_location(self):
        return Point(self.longitude, self.latitude)

search_indexes.py

class RestaurantIndex(indexes.SearchIndex, indexes.Indexable):
    name = indexes.CharField(model_attr='name', faceted=True)
    location = indexes.LocationField(model_attr='get_location')

schema.xml中

<fieldType name='location' class='solr.LatLonType' subFieldSuffix='_coordinate' />

<field name="name" type="text" indexed="true" stored="true" multiValued="false" />
<field name="name_exact" type="string" indexed="true" stored="true" multiValued="false" />     
<field name="location" type="location" indexed="true" stored="true" multiValued="false" />  

然而,当我运行'python manage.py rebuild_index'时,我收到以下错误:

...
File "...\models.py", line 17, in <module> from haystack.utils.geo import Point
File "...\lib\site-packages\haystack\utils\geo.py", line 2, in <module>
  from django.contrib.gis.geos import Point
File "...\lib\site-packages\django\contrib\gis\geos\__init__.py", line 6, in <module>
  from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
File ...\lib\site-packages\django\contrib\gis\geos\geometry.py", line 16, in <module>
  from django.contrib.gis.geos.coordseq import GEOSCoordSeq
File "...\lib\site-packages\django\contrib\gis\geos\coordseq.py", line 9, in <module>
  from django.contrib.gis.geos.libgeos import CS_PTR
File "...\lib\site-packages\django\contrib\gis\geos\libgeos.py", line 52, in <module>
  '", "'.join(lib_names))
ImportError: Could not find the GEOS library (tried "geos_c", "libgeos_c-1"). Try setting   
GEOS_LIBRARY_PATH in your settings.

错误“文件”的一部分... \ lib \ site-packages \ haystack \ utils \ geo.py“,第2行,in 来自django.contrib.gis.geos import Point '让我觉得haystack正在调用django.contrib.gis.geos。

因此我的问题是我是否需要同时导入django.contrib.gis.geos.Point和haystack.utils.geo.Point。

我在看到此错误后实际安装了OSGeo4W64。但是,当我运行'python manage.py rebuild_index'时,我得到了同样的错误。然后我将“GEOS_LIBRARY_PATH ='C:/ OSGeo4W64 / bin'”添加到setting.py并得到错误“WindowsError:[错误126]无法找到指定的模块”。

首先,非常感谢您阅读我的长篇问题。任何帮助都非常感谢。如果我无法弄清楚这一点,我的下一步就是在没有干草堆的情况下开发,我并不是真的很期待,因为我是新手。

再次,先谢谢。

1 个答案:

答案 0 :(得分:1)

您需要提供geos DLL的完整路径,而不是包含目录。 尝试: GEOS_LIBRARY_PATH ='C:/OSGeo4W64/bin/geos_c.dll'