Sunspot は地理空間検索をサポートしていますが、いくつかの制限があります。
索引付け:
searchable do
text :location
location :coordinates do
Sunspot::Util::Coordinates.new latitude, longitude
end
end
探す:
coord = # whatever...
with(:coordinates).near(coord[0], coord[1], :precision => 3)
しかし、それは本当に正確ではありません...私が間違っていなければ、ジオハッシュを使用しています。そのため、2 つの点が互いに近くにあるにもかかわらず見つからない可能性があります。また、ファセットに
ネストすることはできません。near
ADAM のアドバイスに従い、エラスティック サーチに進みます。それが私がしたことです。より多くのコントロールを得ることができます。
Tire は地理空間検索もサポートしていますが、DSL には必要ないため、特定のメソッドはありません。彼らは後でそれらを追加する予定です。
索引付け:
tire.mapping do
indexes :location, type: 'string', analyzer: 'snowball'
indexes :latitude_longitude, type: 'geo_point'
end
def latitude_longitude
[latitude, longitude].join(",")
end
def to_indexed_json
to_json(methods: ['latitude_longitude'])
end
探す:
filter :geo_distance, distance: "#{distance}km", latitude_longitude: [user.latitude, user.longitude].join(",")