Sunspot поддерживает пространственный поиск с использованием Geohash, см. RestrictionWithNear . Но вы можете использовать только заранее определенное расстояние (хотя :precision
).
# model
# lat: decimal
# lng: decimal
class Product < ActiveRecord::Base
seachable do
location :location do
Sunspot::Util::Coordinates.new(lat, lng)
end
end
end
# search
Product.search do
# near(lat, lng)
with(:location).near(76.4556, 67.9987, :precision => 3)
end
Sparcial добавлено в solr начиная с 3.1, я не могу найти соответствующий DSL в солнечном пятне, но вы всегда можете использовать adjust_solr_params
для добавления пользовательских параметров:
Product.search do
adjust_solr_params do |params|
parmas[:fq] << '{!geofilt pt=74.4556,67.9987 sfield=location d=5}'
end
end
Вы должны использовать Solr 3.1 (связанное значение solr в солнечной точке - 1.4) и расположение индексного поля, например
class Product < ActiveRecord::Base
searchable do
string(:location, :as => :location) { [lat,lng].join(',') }
end
end
Также необходимо добавить тип поля в schema.xml. (Например, я сам не пробовал)
<types>
...
<fieldType name="geo" class="solr.LatLonType" omitNorms="true"/>
</types>
<fields>
...
<field name="location" stored="false" termVectors="false" type="geo" multiValued="false" indexed="true"/>
</fields>