我在美国各地都有 Thinking Sphinx 索引位置,我需要找到最接近某个纬度/经度的位置。在最简单的示例中,我使用特定城市的纬度/经度(从 Google Maps API 提取的纬度/经度)并进行搜索,首先按最近的位置排序。
问题是,当我搜索纽约市的位置时,它会给出德克萨斯州奥斯汀的结果。当我在奥斯汀搜索位置时,我会得到宾夕法尼亚州泽西海岸。每个城市搜索都会给我一个完全不同的城市的结果。我什至不确定从哪里开始解决这样的问题。
这是我的索引定义。(该位置有一个关联的城市对象,它也有一个纬度/经度,因此是 location.latitude)
地点:
思考狮身人面像
define_index do
indexes :name
indexes :description
indexes city.name, :as => :city_name
has "RADIANS(locations.latitude)", :as => :latitude, :type => :float
has "RADIANS(locations.longitude)", :as => :longitude, :type => :float
set_property :latitude_attr => :latitude, :longitude_attr => :longitude
# set_property :delta => true
end
###############################################################
在不设置latitude_attr
属性的情况下,我不断收到错误消息:
Sphinx Daemon returned error: index location_core: unknown latitude attribute 'latitude'
搜索命令:
Location.search(:geo => [city.latitude, city.longitude], :order => "@geodist ASC, @relevance DESC", :per_page => 5)
感谢您提供任何帮助以使我朝着正确的方向前进。