Как я могу реализовать службу поиска, которая использует близость к местоположению в качестве параметра ранжирования - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть набор данных, для которого мне нужно внедрить службу поиска на основе местоположения. Сначала я отфильтрую данные по ключевым словам, а затем мне нужно отсортировать их по близости к местоположению пользователя. Как мне реализовать это, некоторые советы по использованию алгоритмов / подходов или советы по моделированию данных будут действительно полезны.

Ответы [ 4 ]

1 голос
/ 23 сентября 2011

Подход -
вы можете вспомнить Apache Solr (поисковая система с открытым исходным кодом) @ http://lucene.apache.org/solr/
Это поможет вам осуществлять поиск по ключевым словам и обеспечивает геопространственные возможности.http://wiki.apache.org/solr/SpatialSearch

Осторожно - может быть слишком затратным или совершенно неконтролируемым, предлагается только в качестве опции.Поскольку я не уверен в качестве данных, формате данных, какие возможности поиска вам нужны.

1 голос
/ 23 сентября 2011

Вы можете использовать базу данных с поддержкой гео, как postgis :

SELECT * FROM points ORDER BY distance(point1, point2)
0 голосов
/ 23 сентября 2011

Вот идея, где вы можете создать ее без использования API других сервисов.Я предполагаю, что вы хотите показать все данные клиенту.Если нет, то вы можете запросить в вашей БД значения min max lat, lon, чтобы ограничить область.

Давайте представим, что клиент хочет видеть ближайшие рестораны с координатами x, y Со стороны клиента вы отправляете запрос веб-службы showdata (lat, lon, введите)

На стороне сервера: Сначала вы запрашиваете свою БД, где выберите тип == restaurant.Это даст вам список ресторанов с координатами широты и долготы.Вы выполняете итерацию списка и вычисляете расстояние от значений lat, lon клиентов и вставляете результат в список элементов.

class Item 
{
  Distance
  Name
  Lat
  Lon
}    
List<Item> items

В качестве последнего шага вы сортируете свой список элементов по значению Distance и возвращаете результат вваш клиент.

0 голосов
/ 23 сентября 2011

Когда я добавляю листинг в свою БД, я запускаю адрес / почтовый индекс через службу геокодирования, такую ​​как Google или Yahoo. Затем я сохраняю эти значения широты / долготы в листинге. Когда пользователь выполняет поиск, я беру его местоположение и снова запускаю его через геокод, а затем могу отсортировать по близости.

Похоже на что-то вроде этого:

http://maurus.net/resources/distance-queries/

...