2016-02-08 3 views
-1

У меня есть проект, который позволяет пользователям искать POI с помощью Elasticsearch, и они могут фильтровать по нескольким атрибутам, включая местоположение. Я хотел бы добавить огранку ко всем фильтрам, большинство из которых являются категориальными переменными, для которых огранка идеальна. Тем не менее, я также хочу, чтобы пользователи имели возможность разбивать по местоположению/городу/метро. Каждое место в настоящее время представляет собой пару lat/long.Граничение по геолокации в Elasticsearch (кластеризация)

Из моих исследований кажется, что наилучшим подходом является использование кластеров k/l пар лат/длин, чтобы получить наиболее распространенные группировки мест для огранки. Как только у меня появятся эти группы, я хотел бы предоставить наиболее узнаваемое имя для этой области (например, даже если «Бруклин» был центром кластера, я бы хотел указать название «Нью-Йорк Сити»).

(a) Можно ли выполнить геоклассирование (k-средство или любой другой способ) в Elasticsearch, чтобы обеспечить огранку по местоположению? Если да, то как? Если нет, это можно сделать вместо Postgres? (б) Как я могу убедиться, что я предоставляю наиболее широко узнаваемое политическое имя для любого региона, возвращенного кластеризацией?

+0

Ничего хорошего при кластеризации. К-средства также являются довольно плохим выбором. (как вы устанавливаете k и не разрешаете ему разрезать прямо через бруклин?) –

+0

@ Anony-Mousse, очевидно, я не эксперт в этом. Какой метод вы бы рекомендовали вместо этого? – jdotjdot

ответ

1

Учитывая Lat/Long (или адрес) в качестве входных данных, вы можете использовать Google Maps Geocoding API для получения (и индекс) конкретные иерархически контекстными этикетки для:

  • страны
  • administrative_area_level_1 (состояние: в США)
  • administrative_area_level_2 (графство: в США)
  • sublocality_level_1 (район: в Нью-Йорке)
  • administrative_area_level_3 (город: в США)
  • местности (район: в США)

Если вы строите визг или AirBnB-подобный интерфейс поиска с компонентом зума карты, вы можете выбрать расположение фасета для отображения на основе некоторых критериев разнообразия :


eg запросите все 6-гранные графы, но отобразите только один из них с соответствующим выбором (например, 2-10 терминов) ... например, если ваш уровень масштабирования (и ограничивающий прямоугольник) включает в себя Бруклин, Манхэттен и Стейтен-Айленд, тогда вы увидеть следующее:

  • страна (США) ... игнорировать, слишком широкая
  • administrative_area_level_1 (New York) ... игнорировать, слишком широкая
  • administrative_area_level_2 (Kings County, New York County, Richmond County) ... игнорировать (как раз в случае с NYC, где sublocality_level_1 больше co mmonly)
  • sublocality_level_1: (Brooklyn, Manhattan, Staten Island) ... подходящий конкретный, показать это!
  • administrative_area_level_3 (New York City) ... игнорировать, слишком широкая
  • локальность (<100s of neighborhoods>) ...игнорирование, слишком узкое

 Смежные вопросы

  • Нет связанных вопросов^_^