Django Haystack与Elasticsearch Dwithin错误的投影或单位?

时间:2014-10-26 22:42:01

标签: python django elasticsearch django-haystack geodjango

我正在尝试将geolocation添加到我的搜索API中。在API中,您可以根据搜索字词和当前位置搜索商家。我正在使用django haystack进行索引和查询,除了一个奇怪的问题,一切正常。

当我搜索半径为5英里(D(mi=5))时,我看不到任何结果,即使输入位置的半径5英里内有明显结果。但是当我输入100英里(D(mi=100))时,我确实看到了距离输入位置不到1英里的结果。

问题:距离类(D)是否可能使用与WGS-84不同的投影?

这是我的iPython shell会话:

In [5]: from haystack.utils.geo import D

In [6]: from haystack.query import SearchQuerySet

In [7]: dist = D(mi=5)

In [8]: point = Point(-122.256013, 37.864203)

In [9]: SearchQuerySet().dwithin('location', point, dist)
Out[9]: []

In [10]: dist2 = D(mi=100)

In [11]: sqs = SearchQuerySet().dwithin('location', point, dist).distance('location', point2)

In [12]: sqs
Out[12]: [<SearchResult: api.business (pk=u'3232')>, <SearchResult: api.business (pk=u'3238')>]

In [13]: sqs[0].distance
Out[13]: Distance(km=0.140045623232) << This is correct

版本

Python库

  • Django:1.7
  • pyelasticsearch:1.2.0
  • geopy:1.3.0
  • django-haystack:2.3.1

外部依赖

  • GDAL:1.11.0
  • GEOS:3.4.2

1 个答案:

答案 0 :(得分:0)

我有同样的错误,我修复了将django-haystack升级到2.4

Elasticsearch以千米为单位处理公里数(请参阅:issue-957pr-1003)。