用ES实现根据经纬度由近及远推荐店铺

这篇具有很好参考价值的文章主要介绍了用ES实现根据经纬度由近及远推荐店铺。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍

ES中特有的类型geo_point,是用来存储地图类型的。店铺推荐、地图搜索和外卖平台等,实现目标距离你多少米,就是用这个数据类型做出来的。

其中,ES支持的地图检索方式有以下几种;

geo_distance:直线距离检索,如给定点A,要求返回地图上距离点A三千米的店铺

geo_bounding_box:以两个点确定一个矩形,获取在矩形内的全部数据

geo_polygon:以多个点,确定多边形,获取多边形内的全部数据

本文则以geo_distance为例说明。

二、举例说明

2.1 新建ES索引
PUT /map
{
  "settings": {
    "number_of_replicas": 3,
    "number_of_shards": 5
  }
  , "mappings": {
    "properties": {
      "name":
      {
        "type": "text"
      }
      ,"location":
      {
        "type": "geo_point"
      }
    }
  }
}
2.2 添加索引数据
PUT /map/_doc/1
{
  "name":"天安门",
  "location":
  {
    "lon":116.403981,
    "lat":39.914492
  }
}


PUT /map/_doc/2
{
  "name":"海淀公园",
  "location":
  {
    "lon":116.302509,
    "lat":39.991152
  }
}

PUT /map/_doc/3
{
  "name":"北京动物园",
  "location":
  {
    "lon":116.343184,
    "lat":39.947468
  }
}
2.3 执行ES搜索

搜索条件:

【query中的参数】

location:指定定位的经纬度,一般取用户定位点的经纬度。

lat:纬度。

lon:经度。

distance:距离指定定位的最远距离,即本次搜索结果必须在指定定位点到该距离之间。

distance_type:arc表示圆形范围

es 附近的店铺,ElasticSearch,elasticsearch,Powered by 金山文档

【sort】中的参数

location:指定定位的经纬度,一般取用户定位点的经纬度。

order:距离排序,asc正序,desc则是倒序。

unit:距离单位,m就是米,km就是千米。

GET map/_search
{
  "from": 0, 
  "size": 10, 
  "query": {
    "bool": {
      "filter": [
        {"geo_distance":{
          "distance":"3000km",
          "location":{
            "lat":22.818481786041648,
            "lon":108.37950959102159
          },
          "distance_type":"arc"
        }}
      ]
    }
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 22.818481786041648,
          "lon": 108.37950959102159
        },
        "order": "asc",
        "unit": "m"
      }
    }
  ]
}

执行搜索,得到搜索结果:

根据前面的搜索条件,执行搜索后得到是按照当前定位点的经纬度,查询距离3km以内的所有店铺,由近及远的排序的结果。

location:每个店铺所在的经纬度。

sort:每个店铺距离当前定位点的距离。前面搜索条件我们设置了单位为米,所以这里就是距离1810米的意思。

es 附近的店铺,ElasticSearch,elasticsearch,Powered by 金山文档

三、结语

至于geo_bounding_box和geo_polygon的搜索方式我就不展开举例了,操作起来也大同小异,有兴趣的可以研究。

根据经纬度查询结果并排序这个业务已经很常见了,既然ES提供了这个便捷,不妨使用一下,当然还有其他的办法可以实现这个效果,大家可以根据自己实际情况选型吧。文章来源地址https://www.toymoban.com/news/detail-637998.html

到了这里,关于用ES实现根据经纬度由近及远推荐店铺的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 根据经纬度计算两点之间的距离

    前言 在我们平时使用美团,饿了么等app进行订餐,或者使用猫眼进行订电影票的时候,都有一个距离的排序,表明该家店距离我们当前的位置,这种基于地理位置的服务,统一被称为LBS(Location Based Service),而LBS的实现则是借助于GIS,WC(无线通信)等信息技术来实现。而今

    2024年02月05日
    浏览(88)
  • NC文件根据经纬度提取点上数值

    Hello,Hello,Hello,大家好,时隔上一次更新已经很久了,今天主要和大家分享一组简单的代码,来提取NC文件中某一点的数值! 本次实例数据依旧使用喜闻乐见的NCEP数据,数据使用的是多层气温。或者可以直接点击这里下载 这个就是下载好的数据: 大家可以看一下,这个数

    2024年02月05日
    浏览(49)
  • Python根据经纬度在地图上显示(folium)

    1、location地图中心点 经纬度,list 或者 tuple 格式,顺序为 latitude(纬度), longitude(经度) 2、zoom_start地图等级 缩放值,默认为 10,值越大比例尺越小,地图放大级别越大 3、tiles 显示样式,默认*‘OpenStreetMap’*,也就是开启街道显示;也有一些其他的内建地图样式,如’Stamen T

    2024年02月14日
    浏览(56)
  • Java根据坐标经纬度计算两点距离(5种方法)、校验经纬度是否在圆/多边形区域内的算法推荐

    目录 前言 一、根据坐标经纬度计算两点距离(5种方法) 1.方法一 2.方法二 3.方法三 4.方法四 5.方法五 5.1 POM引入第三方依赖 5.2 代码 6.测试结果对比 二、校验经纬度是否在制定区域内 1.判断一个坐标是否在圆形区域内 2.判断一个坐标是否在一个多边形区域内 3.结果 总结   

    2024年02月10日
    浏览(86)
  • uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

    ​ 根据官方建议要想在 app-vue 流畅使用 Canvas 动画,需要使用 renderjs 技术,把操作 canvas 的js逻辑放到视图层运行,避免逻辑层和视图层频繁通信。 这里呢结合 renderjs 技术实现绘制轨迹图形。 你可能需要先了解 renderjs 如何数据通讯:renderjs 与 app-vue之间数据交互 html中使用

    2024年02月11日
    浏览(43)
  • 根据手机指南针经纬度在地图上找到其位置

    使用手机指南针获取经纬度,然后在地图上找到位置。 1、使用手机指南针获取经纬度: 2、将度分秒转换为度: 分/60+秒/3600+整数度数,得到以度为单位的数值 手机经纬度:117.1291666,31.842777 3、坐标系转换: 地图坐标系转换 - 在线工具 输入手机经纬度:117.1291666,31.842777 得到

    2024年02月09日
    浏览(41)
  • Java调用高德地图API根据详细地址获取经纬度

    访问高德开放平台https://lbs.amap.com/ 登录后,在控制台中创建一个应用,获取生成的应用key。这个key将用于访问高德地图API。   您可以使用Java中的 HttpURLConnection 或 HttpClient 等工具发送HTTP请求到高德地图API,并传递参数以获取经纬度信息。以下是一个使用 HttpURLConnection 的示例

    2024年02月05日
    浏览(55)
  • ES 地图经纬度搜索

    ES中提供了一个数据类型 geo_point,这个类型就是用来存储经纬度的。 创建一个带geo_point类型的索引,并添加测试数据  

    2024年02月12日
    浏览(40)
  • 如何利用地图API接口根据地址获取具体的经纬度?

     目录 一、登录到百度地图开放平台 二、认证为开发者 三、创建应用 四、地址转经纬度API接口 五、封装JAVA工具类 百度地图开放平台网址:https://lbsyun.baidu.com/ 这里你有两种选择,可以选择认证个人开发者或者企业开发者,区别在企业认证每日接口调用次数配额更多,并发

    2024年02月16日
    浏览(56)
  • ElasticSearch - 根据经纬度,简单搜索指定距离范围内的数据

    ES的地图检索方式 ES支持的地图检索方式有以下几种; geo_distance geo_bounding_box geo_polygon 1、 geo_distance :直线距离检索,如给定点A,要求返回地图上距离点A三千米的商家(点外卖场景) 2、查找索引内距离北京站(116.433733,39.908404)3000米内的点 geo_distance涉及的参数如下 location:确

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包