在Elasticsearch中进行地理定位(聚类)

时间:2016-02-08 09:58:06

标签: elasticsearch geolocation grouping geocode

我有一个项目,允许用户使用Elasticsearch搜索POI,他们可以通过许多不同的属性(包括位置)进行过滤。我想为所有过滤器添加切面,其中大多数都是分面变量,其中切面是完美的。但是,我也希望用户能够按位置/城市/都市区进行调查。每个位置目前都是一对/长对。

根据我的研究,似乎最好的方法是使用纬度/长度对的k均值聚类来获得最常见的分割位置分组。一旦我有这些分组,我想提供该区域最常识别的名称(例如,即使"布鲁克林"是集群的中心,我也想提供名称& #34;纽约市")。

(a)可以在Elasticsearch中完成地理聚类(k-means或任何其他方式)以允许按位置进行分区?如果是这样,怎么样?如果没有,可以在Postgres中完成吗? (b)如何确保我为群集返回的任何特定区域提供最广为人知的政治名称?

1 个答案:

答案 0 :(得分:1)

将Lat / Long(或地址)作为输入,您可以使用Google Maps Geocoding API检索(和索引)特定的分层范围标签:

  • 国家
  • administrative_area_level_1(州:在美国)
  • administrative_area_level_2(县:在美国)
  • sublocality_level_1(行政区:纽约市)
  • administrative_area_level_3(城市:在美国)
  • 地区(邻里:在美国)

如果您正在构建具有缩放地图组件的Yelp或类似AirBnB的搜索界面,您可以根据某些多样性标准选择要显示的位置构面:

e.g。请求所有6个方面,但只显示具有适当选择多样性的一个(例如2-10个术语)...例如,如果您的缩放级别(和边界框)包括布鲁克林,曼哈顿和史坦顿岛,那么你将请参阅以下内容:

  • 国家/地区(美国)...... 忽略,过于宽泛
  • administrative_area_level_1(New York)... 忽略,过于宽泛
  • administrative_area_level_2(Kings County, New York County, Richmond County)... 忽略(仅适用于更常用sublocality_level_1的NYC)
  • sublocality_level_1 :( Brooklyn, Manhattan, Staten Island)... 具体说明,显示此内容!
  • administrative_area_level_3(New York City)... 忽略,过于宽泛
  • locality(<100s of neighborhoods>)... 忽略,太窄