我使用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]无法找到指定的模块”。
首先,非常感谢您阅读我的长篇问题。任何帮助都非常感谢。如果我无法弄清楚这一点,我的下一步就是在没有干草堆的情况下开发,我并不是真的很期待,因为我是新手。
再次,先谢谢。
答案 0 :(得分:1)
您需要提供geos DLL的完整路径,而不是包含目录。 尝试: GEOS_LIBRARY_PATH ='C:/OSGeo4W64/bin/geos_c.dll'