全米に 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)
私を正しい方向に導くために提供できる助けをいただければ幸いです。