Поиск на основе радиуса по широте и долготе в AWS CloudSearch

Наша компания использует AWS CloudSearch для поиска и извлечения пользовательских данных. Пользовательские данные состоят из поля position типа lat,lon. Таким образом, для заданного радиуса и положения мы должны найти всех пользователей в диапазоне радиуса. Как написать поисковый запрос для получения необходимых данных?
Мы используем node.js в качестве серверного языка.
Помогите, пожалуйста.


person Sri Harsha    schedule 15.06.2015    source источник
comment
Какой у вас бэкенд, postgres или elasticsearch???   -  person Subburaj    schedule 15.06.2015
comment
Взгляните на эту ссылку: docs.mongodb.org/manual/ ссылка/команда/geoNear/   -  person Subburaj    schedule 15.06.2015


Ответы (2)


В cloudsearch нет возможности поиска латлонов в радиусе. Можно заказать по расстоянию, а можно поискать в радиусе.

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

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

Вот пример запроса, который делает то же самое: q=user*&fq=location%3A%5B%2740.628611,-100.694152%27,%2725.621966,-66.686706%27%5D&expr.geo=haversin%2838.958687,-77.343149,location. широта,местоположение.долгота%29&sort=geo%20asc

здесь: fq=location%3A%5B%2740.628611,-100.694152%27,%2725.621966,-66.686706%27%5D ---> поиск в пределах ограничивающей рамки Latlons, то есть в верхнем левом углу и нижнем правом углу.

expr.geo=haversin%2838.958687,-77.343149,location.latitude,location.longitude%29&sort=geo%20asc ---> создает выражение, которое вычисляет расстояние между LatLon в документе поиска до фиксированной точки (укажите это как центр вашего круг). и возвращает результат, отсортированный по расстоянию.

Обратите внимание, что функция расстояния "haversin" вычисляет расстояние между LatLons как расстояние между двумя точками на идеальной сфере.

person anshul410    schedule 26.06.2015

Вы хотите ранжировать результаты на основе функции гаверсина. Это эквивалентно «поиску в радиусе», за исключением того, что вас интересует расстояние на поверхности сферы.

Вот пример такого запроса с CloudSearch (от http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-locations.html):

q=restaurant&expr.distance=haversin(35.621966,-120.686706,location.latitude,location.longitude)&sort=distance asc

Ваш выбор языка на стороне сервера не имеет значения, поскольку CloudSearch предоставляет только интерфейс REST. Ознакомьтесь с руководством по началу работы, если вы еще этого не сделали. http://docs.aws.amazon.com/cloudsearch/latest/developerguide/getting-started.html

person alexroussos    schedule 15.06.2015