该楼层疑似违规已被系统折叠
比洳我在北京定位我的位置在北京,然后
然后我想搜索上海市的一个小吃店我到设置里切换城市后搜索关键词,为什么会自动切换到我所在位置的城市怎么解决?
在ElasticSearch中地理位置通过geo_point
这个数据类型来支持。地理位置的数据需要提供经纬度信息当经纬度不合法时,ES会拒绝新增文档这种类型的数据支持距离计算,范围查询等在底层,索引使用实现
geo_point类型必须显示指定,ES无法从数据中推断在ES中,位置数据可以通过对象字符串,数组三种形式表示分別如下:
POST下面4条测试数据:
返回全部的5条数据,score均为1:
ES中有4中位置相关的过滤器用于过滤位置信息:
该类型过滤器查找的范围如下图:
以下查询,查找距厦门500公里以内的城市:
接着我们按照距离厦门远近查找:
结果如下依次是厦门、福州、广州…。符合我们的常识: 0
结果返回的sort字段是指公里数加上限制条件,只返回最近的一个城市:
ES提供了3种位置聚合:
下面这个查询根据距离厦门的距离来聚合返回0-500,500-8000km的聚合:
该聚合方式根据geo_point数据对应的geohash值所在的cell進行聚合cell的划分精度通过precision
属性来控制,精度是指cell划分的次数
可以看到,有3个城市的的geohash值为ws将精度提高到5,聚合结果如下:
这个聚合操作计算能够覆盖所有查询结果中geo_point的最小区域返回的是覆盖所有位置的最小矩形:
也就是说,这两个点构成的矩形能够包含所有到廈门距离10000km的区域我们把距离调整为500km,此时覆盖这些城市的矩形如下:
图解 MongoDB 地理位置索引的实现原理:
Geopoint数据类型:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。