• 地理(Geo)搜索
Manticore Search 的一个强大功能是能够将全文搜索与地理位置结合起来。例如,零售商可以提供一个搜索功能,用户可以查找产品,结果集可以显示最近有该产品库存的商店,用户可以到店取货。旅游网站可以基于搜索限制在某个区域内的结果,并按照距离某个点的远近排序(例如,“搜索酒店附近的博物馆”)。
要进行地理搜索,文档需要包含一对经纬度坐标。这些坐标可以作为浮点属性存储。如果文档有多个位置,使用 JSON 属性来存储坐标对可能更为方便。
坐标可以以度或弧度存储。
如果为经纬度属性生成了辅助索引,基于成本的优化器 可能会自动使用它们来加速地理搜索。
执行距离计算
要计算两个点之间的距离,可以使用 GEODIST() 函数。GEODIST
需要两对坐标作为前四个参数。
在简化的 JSON 格式中,第五个参数可以配置函数的某些方面。默认情况下,GEODIST
期望以弧度为单位的坐标,但可以通过添加 in=degrees
来允许以度为单位输入。如果要进行地理距离计算的坐标与表中存储的坐标类型不同(度或弧度),结果将会误导。
默认情况下,计算的距离以米为单位,但可以通过 out
选项将其转换为公里、英尺或英里。最后,默认情况下使用一种名为 adaptive
的计算方法。也可以选择基于 haversine
算法的替代方法,尽管这种方法较慢且不太精确。
函数的结果——距离——可以在 ORDER BY
子句中使用以按距离排序结果:
或者可以限制结果在一个点的径向区域内:
在多边形中搜索
另一个地理搜索功能是确定一个位置是否位于指定区域内。一个特殊函数用于构造多边形对象,随后另一个函数用来测试一组坐标是否包含在该多边形内。
有两个函数可用于创建多边形:
GEOPOLY2D() - 创建一个考虑地球曲率的多边形
POLY2D() - 创建一个平面空间中的简单多边形
POLY2D
适用于边长小于500公里的区域的地理搜索(对于拥有3-4条边的多边形;对于多边形边数较多的情况,应该考虑更小的值)。对于边长较长的区域,需要使用 GEOPOLY2D
以确保准确的结果。GEOPOLY2D
期望使用以度为单位的纬度/经度对;使用弧度会导致平面空间中的结果(类似于 POLY2D
)。
CONTAINS() 接收一个多边形和一组坐标作为输入,如果点在多边形内则输出 1
,否则输出 0
。
最后更新于