【问题标题】:Faceting by geolocation in Elasticsearch (clustering)在 Elasticsearch 中按地理位置分面(集群)
【发布时间】:2016-02-08 09:58:05
【问题描述】:

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

根据我的研究,似乎最好的方法是使用 lat/long 对的 k-means 聚类来获得最常见的分面位置分组。一旦我有了这些分组,我想提供该地区最常见的名称(例如,即使“布鲁克林”是集群的中心,我也想提供名称“纽约市”)。

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

【问题讨论】:

  • 两者都不擅长聚类。 k-means 也是一个相当糟糕的选择。 (你如何设置 k,并防止它直接穿过布鲁克林?)
  • @Anony-Mousse,显然我不是这方面的专家。你会推荐什么方法?

标签: elasticsearch geolocation grouping geocode


【解决方案1】:

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

  • 国家
  • administrative_area_level_1(州:在美国)
  • administrative_area_level_2(县:在美国)
  • sublocality_level_1(自治市镇:纽约市)
  • administrative_area_level_3(城市:美国)
  • 地点(邻里:在美国)

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


例如request all 6 term facets, but only display the one with the appropriate selection diversity (say 2-10 terms) ... for example, if your zoom level (and bounding box) includes Brooklyn, Manhattan and Staten Island, then you'll请参阅以下内容:

  • 国家(美国)... 忽略,太宽泛
  • administrative_area_level_1 (New York) ... 忽略,太宽泛了
  • administrative_area_level_2 (Kings County, New York County, Richmond County) ... 忽略(仅在纽约市更常用 sublocality_level_1 的情况下)
  • sublocality_level_1: (Brooklyn, Manhattan, Staten Island) ... 适当具体,显示这个!
  • administrative_area_level_3 (New York City) ... 忽略,太宽泛
  • locality (<100s of neighborhoods>) ... 忽略,太窄了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多