开放搜索相关性函数Distance:计算你我之间的距离

简介: 你在点外卖,distance在计算着你和商家的距离;你在打车,distance在计算着你和司机的距离;你在找朋友,distance在计算着你和朋友间的距离;你在生活,distance在计算。

本期分享专家:夏苜,一直从事oss、cdn、ram、开放搜索等产品的技术支持,虽然是女子,对技术也有一颗执著的心。爱技术,爱分享。本期的分享专题—开放搜索相关性函数distance的应用

77055a67b246ce07dc0fd4ec03dddc5455647a86


Distance, 是距离的意思,但是在技术函数的世界里,它可以计算距离。

你在点外卖,distance在计算着你和商家的距离;

你在打车,distance在计算着你和司机的距离;

你在找朋友,distance在计算着你和朋友间的距离;

你在生活,distance在计算。

原来生活中看似常用的功能是被这个神奇的函数distance在计算着,这是如何实现的?

Distance函数是什么样的,我们先来简单介绍并了解下他的结构。


  • 简介:

distance 函数用来获取两个点之间的球面距离。一般用于LBS的距离计算,兼有function及feature的功能,可以同时在filter、sort及formula精排表达式中使用。


  • 函数结构:

distance(longitude_a, latitude_a, longtitude_b, latitude_b, output_name)

其中

longitude_a, latitude_a表示a点的经纬度,支持的参数类型为浮点型的字段名。这两个数据是需要从开放搜索文档中获取的固定数据,所以应用结构中需要有两个浮点型类型(flout,double)的字段。

longtitude_b, latitude_b表示b点的经纬度,也需要是浮点型,在搜索条件中输入的数据。当在精排表达式中使用时,可以通过kvpairs进行参数的传递。

outputname是返回值,计算距离,float类型,单位为千米。仅限于精排表达式中使用,filter及sort子句不支持。设置outputname参数后,实际的距离值将展示到variableValue节点中,该节点只能在返回格式为xml或者fulljson中(config子句中format参数可以设置)才能得到。


  • 在使用前我们也要做好准备工作:

1、创建开放搜索应用,应用结构中需要有两个浮点型类型字段存储a点的经纬度。我这里设置了字段lng和lat,当然double也可以。导入a点信息以及位置坐标。

 ade61ea23fbd9ac5da9343fa461b937f3f058eb2

1241836adfe001bb92443e4e4dc0c35753a3450c

 

2、我们测试下如果在distance中两个参数不是浮点型字段的情况:

category是int类型,报错sort表达式语法有误:6139  Sort expression syntax error.

 3826a9eaa5157dc1e4ff01b408efb4e317931c97


  • 用一个点外卖的过程让你秒懂distance的应用

1. 确定用户坐标(120.34256,30.56982),以用户坐标为中心按照距离由近及远排序来展示满足您需求的商家。用distance是这样实现的:

sort= +distance(lng,lat,"120.34256","30.56982")

在显示中通过查看排序分可以看到计算的距离。

注意:在sort中没有引进RANK,粗排和精排设置是不生效的,具体可以参考sort子句的介绍。

 97ddb4481998ea196add06f60c2612b338a30489

2. 在已经展示的商家里面继续提出更高的要求,要求展示客户附近200km范围内的商家。看看怎么实现?

sort= +distance(lng,lat,"120.34256","30.56982")

filter= distance(lng,lat,"120.34256","30.56982")<200

 473f6335f378e89e11c267170d6fc7b5972791ab

3. 接下来我想了解商家到底距离我有多远?即在获取到1和2的展示结果上显示出实际距离值。

通过上面介绍了解到,距离值只能通过精排表达式来获取。那么我们来设置下精排表达式,先测试下将sort排序放在精排表达式中:

将distance1精排表达式设置为

distance(lng, lat, 120.34256,30.56982)

sort=+RANK;

这个时候排序分中就会出现粗排和精排的结果了

 effcbc3384b65250013da606cb0751ba26269f22

 73f8b876b268948de786dbab37a813aa6aa459eb

下面测试精排中加上距离返回值的情况:

将distance2精排表达式设置为

distance(lng, lat, 120.34256,30.56982,distance_value)

sort=+RANK;

config=start:0,hit:10,format:fulljson;

查看variableValue的内容即可获取返回的距离值

 8ec437fd5aff2b93e82a9457055f0d8a4201ed45

 dd4c581e3319352cca689610f73ca0f225657f3c

4、 订餐的过程中,当然是允许客户是移动的,这个时候需要将变化的位置进行传送,distance是这么表达

一般在精排表达式中不会设置固定的距离值,每个用户的位置可能不同,如果要经常变化精排表达式不太合适。这样就用到了传参kvpairs子句。

将distance3精排表达式设置为

distance(lng, lat,lng_b, lat_b, distance_value)

sort=+RANK;

config=start:0,hit:10,format:fulljson;

kvpairs=lng_b:120.34256,lat_b:30.56982


8bfa7126cdae04adbbf7b8428efbd0ccd47fe87a

 

4a31c824968cc38b1aec04879604fd88defeb632

 


上面的过程完美的使用dinstance函数实现了客户和商家之间的距离测量,你学会了吗? 

本期分享结束啦 ,欢迎大家留言讨论,对distance有什么看法,想了解哪些技术?统统说出来,下期再见。


相关文章
|
Java
给网站添加微信扫描二维码登录功能
最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项。
4908 0
|
运维 Linux
keepalived详解(二)——keepalived安装与配置文件
keepalived详解(二)——keepalived安装与配置文件
1495 1
|
Docker 容器
如何提高Docker的下载速度-----配置加速器
在正常情况下,docker默认连接的国外官方镜像,在国外的网友访问该官方镜像自然不成问题,中国的网络访问国外官方镜像网速一向很慢,而且往往还会遭遇断网的窘境。docker pull 国内网络链接失败或很卡慢,一般都需要更换至国内。
16895 1
|
分布式计算 大数据 数据处理
从Excel到大数据:别让工具限制你的思维!
从Excel到大数据:别让工具限制你的思维!
643 85
|
存储 人工智能 运维
大模型训练稳定性思考和实践
本次分享由阿里云智能集团高级技术专家张彭城主讲,聚焦大模型训练的稳定性问题。主要内容分为三部分:1) 大模型训练稳定性的关键挑战,包括大规模同步任务中的故障率高和恢复成本大;2) 阿里云大模型训练稳定性系统的介绍,涵盖健康检测、实时可观测系统及自愈系统;3) 实践分享,探讨集群网络故障定位与修复、性能优化等实际问题的解决方案。通过这些措施,确保大模型训练的高效与稳定。
|
API 文件存储 Python
python 群晖nas接口(二)
这段代码展示了如何通过API将文件上传到群晖NAS。它使用`requests`库发送POST请求,指定文件路径、创建父级目录及覆盖同名文件的参数,并打印上传结果。确保替换`yourip`和`sid`为实际值。
1335 2
|
传感器 数据采集 算法
python实现ModBusRTU客户端方式
python实现基于串口通信的ModBusRTU客户端是一件简单的事情,只要通过pymodbus模块就可以实现。
|
开发框架 前端开发 JavaScript
React、Vue.js 和 Angular主流前端框架和选择指南
在当今的前端开发领域,选择合适的框架对于项目的成功至关重要。本文将介绍几个主流的前端框架——React、Vue.js 和 Angular,探讨它们各自的特点、开发场景、优缺点,并提供选择框架的建议。
564 6
|
机器学习/深度学习 运维 分布式计算
大数据技术专业就业前景
大数据技术专业就业前景广阔,广泛应用于互联网、金融、医疗等众多行业,助力企业数字化转型。岗位涵盖大数据开发、分析、运维及管理,如大数据工程师、分析师和系统运维工程师等。这些岗位因专业性和稀缺性而享有优厚薪资,尤其在一线城市可达20万至50万年薪。随着技术进步和经验积累,从业者可晋升为高级职位或投身数据咨询、创业等领域,发展空间巨大。
1876 6
|
机器学习/深度学习 Kubernetes 监控
Jupyter 集群管理:大规模部署的最佳策略
【8月更文第29天】当涉及大规模部署 Jupyter 笔记本服务器时,组织通常需要考虑如何有效地管理这些资源,以便支持多用户、高可用性和高性能的需求。Jupyter 集群管理不仅关乎于提供一个稳定的开发环境,还涉及到安全性、可扩展性和资源优化等问题。
876 1

热门文章

最新文章