> 文章列表 > Elasticsearch:位置搜索介绍

Elasticsearch:位置搜索介绍

Elasticsearch:位置搜索介绍

在这个互联网和信息时代,在应用程序和应用程序中启用基于位置的搜索是一个普遍的要求。 基于位置的搜索根据邻近度获取场所或地点,例如附近的餐馆、半径不超过 1 公里的待售房屋等。 我们还使用基于位置的搜索来查找前往某个地方或兴趣点的方向。

好消息是地理空间支持是 Elasticsearch 中的一等公民。 专用数据类型允许我们定义用于索引地理空间数据的模式,从而实现集中搜索。

Elasticsearch 提供一组地理空间搜索查询,例如 bounding_box、geo_distance 和 geo_shape,具体取决于给定的用例。 这些查询足以满足大多数用例。 这些查询中的每一个都满足本节中简要讨论的一组要求。

Bounding box query

有时,我们可能想找出周边地区的餐馆、学校或大学等地点的列表; 假设是正方形或长方形。 我们可以通过获取左上角和右下角的坐标集来构造一个矩形,通常称为地理矩形。 这些坐标由一对经度和纬度测量值组成,代表这些角。

Elasticsearch 提供了一个 bounding_box query,让我们可以搜索适合 geo rectangle 的所需地址。 此查询获取由我们的坐标集构建的地理矩形内的兴趣点(作为查询条件)。 例如,下图表示包含在一个这样的地理矩形中的地址。

如上图中的矩形标记,我们正在搜索伦敦市中心的地址,该区域在地理矩形中突出显示。 与此矩形相交的地址作为正结果返回。 如需了解如何做 bounding_box query,请参阅文章:

  • Elasticsearch:Geo Point 和 Geo Shape 查询解释

  • Elasticsearch:高级数据类型介绍

  • Elasticsearch:理解 Elastic Maps 中的 geohash 及其聚合

Geo_distance query

你可能看过好莱坞电影,其中一名 FBI 特工试图在一个围绕中心焦点画成圆圈的区域中锁定逃犯。 这正是 geo_distance query 所做的!

Elasticsearch 提供了 geo_distancequery 来获取圆圈内的地址。 给定的中心由经度和纬度以及作为距离的半径定义。 下图以图形方式演示了地理距离概念。

如图所示,我们有一个中心位置(在地图上显示为掉落的大头针)和一个覆盖我们要查找的地址的圆形区域。 焦点(或中心位置)是地图上由纬度和经度坐标指示的点。 了解如何做 geo_distance query,请参阅文章:

  • Elasticsearch:Geo Point 和 Geo Shape 查询解释

  • Elasticsearch:在 Elasticsearch 中按距离有效地对地理点进行排序

  • Elasticsearch:使用 Elasticsearch 进行地理位置搜索

Geo_shape query

还有另一种类型的查询,geo_shape query。 此查询获取给定几何构造的地理包络中的地理点(地址)列表。 信封可以是三边三角形或多边形(除非信封不能是开放式的)。 下图形象地展示了这个概念。

该图显示了在具有给定的六对坐标(每一对是具有纬度和经度的地理点)的地图上构建的六角形包络线。 geo_shape search 查找适合此多边形内的位置。想了解更多关于 geo_shape 方面的搜索,请阅读文章:

  • Elasticsearch:Geo Point 和 Geo Shape 查询解释
  • Elasticsearch:Geoshape query - 过滤含有地理位置的文档

  • Elasticsearch:如何制作 GeoJSON 文件并进行地理位置搜索