Геопространственные поиски с помощью Solr (websolr) в Rails 3.x

Я хочу использовать Solr для текстового и геопространственного поиска в приложении Rails 3.1. Я вижу, что websolr поддерживает геопространственную индексацию и поиск, но два гема для этого ( sunspot & rsolr), по-видимому, (в настоящее время) не реализуют его. Sunspot, похоже, находится в процессе добавления функциональности, но утверждает, что "[геопространственный] является экспериментальным и не выпущен. DSL может измениться".

Существуют ли другие реализации геопространственного поиска с помощью sunspot + websolr? Я немного прогуливал и сталкивался с некоторыми, но они кажутся хакерскими, и я бы предпочел не использовать то, что нашел, если уже есть базовая функция или более поддерживаемый подход.

2 ответа

Решение

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(",")

Для потомков: Sunspot с тех пор выпустила версию 1.3.0 с поддержкой пространственного поиска Solr 3, что делает его идеальным вариантом для Heroku с Websolr.

Другие вопросы по тегам