Упорядочить результаты поиска Solr / sunspot по географическому положению - PullRequest
4 голосов
/ 03 мая 2011

Я бы хотел иметь возможность упорядочить результаты поиска по баллам и местоположению. У каждого пользователя в БД есть широта / лот, и я сейчас индексирую:

location :coordinates do
  Sunspot::Util::Coordinates.new latlon[0], latlon[1]      
end

Модель, по которой я бы выполнил поиск, также индексируется таким же образом. По сути, я пытаюсь добиться того, чтобы результаты упорядочивались по баллам, а затем по местоположению. Поэтому, если я ищу Walmart, я хотел бы видеть все Walmart, упорядоченные по их географической близости от моего местоположения.

Я помню, что читал что-то о новой геосортировке solr, но не уверен, что она не в альфе и / или в sunspot реализована оболочка.

Что бы вы порекомендовали?

1 Ответ

6 голосов
/ 03 мая 2011

Из-за способа, которым Sunspot вычисляет типы местоположений, вам нужно будет выполнить дополнительную работу для ног, чтобы она также сортировалась по расстоянию от вашей цели. Он работает так, что создает гео-хеш для каждой точки, а затем выполняет поиск с использованием обычного полнотекстового поиска по этому гео-хешу. В результате вы, вероятно, не сможете определить, находится ли точка в 10 км дальше, чем точка в 5 км, но вы сможете определить, находится ли точка в 50 км дальше, чем точка в 1-2 км. , Точные расстояния являются произвольными, но в результате вы, вероятно, не получите столь же детализированный результат, как вам хотелось бы, и поиск действует скорее как способ фильтрации точек, которые находятся в приемлемой близости. После того, как вы отфильтровали свои точки с помощью встроенного поиска местоположения, есть три способа выполнить то, что вы хотите:

  1. Обновите до Solr 3.1 или более поздней версии и обновите файл schema.xml, чтобы использовать новые столбцы пространственного поиска . Затем вам нужно будет внести пользовательские изменения в Sunspot, чтобы создать поля и упорядочения, которые будут работать с этими новыми типами данных. Насколько я знаю, они еще не доступны в Sunspot, поэтому вам придется самостоятельно устанавливать эти соединения, и вам придется копаться в Solr, чтобы выполнить некоторые ручные настройки.
  2. Использование Пространственный плагин Solr . Вам нужно будет установить новый JAR-файл в каталог Solr, и вам придется внести некоторые изменения в Sunspot, но они относительно безболезненны, и полные инструкции можно найти здесь .
  3. Используйте вашу БД, если ваша БД также проиндексирована по столбцам местоположений, то вы можете использовать встроенный поиск местоположения Sunspot, чтобы отфильтровать результаты до приемлемого размера. Затем вы можете запросить в БД эти результаты и упорядочить их по близости к вашему местоположению, используя собственную функцию расстояния.
...