介绍智能匹配引擎主要服务于哈尔滨四轮业务,为网约车和打车业务的司机-拼车匹配场景提供强大的技术支持。本文主要讲解网约车业务下司机与乘客匹配过程中的一些技术实现。应用场景匹配网约车业务的应用场景根据用户类型分为司机端和乘客端。以下是两端主要涉及的匹配场景。司机端与乘客端整体流程数据链路1.司机/乘客下单数据通过业务DB的binlog同步到Kafka,将flink任务消费的Kafka中的消息写入ES.2、司机/乘客找单的过程是通过匹配引擎服务调用ES中的订单数据。匹配过程。召回过程的详细解释。司机没有行程(查找附近的订单)城市列表:调取最近三天发出的与司机当前城市起止城市相同,且起点在司机当前位置指定半径范围内的乘客订单。聚合:对召回结果进行二次聚合。纬度:目的地区县、目的地商圈跨城列表:召回最近16天内发出的出发城市与司机所在城市相同,目的地城市与司机所在城市不同的乘客订单。聚合:对召回结果进行二次聚合。纬度:司机自主行程的目的地城市、区县。当司机有行程时,匹配过程主要包括以下七个步骤。主要涉及基本条件、时间、空间、覆盖范围的过滤。其中,space和coverage是相关的Filtering,需要对数据做一些业务逻辑或者算法计算,判断是否满足召回条件。我们通过ES插件来实现。ETAfilterETA:司机预计到达时间(estimatedtimeofarrival),等于司机(出发时间+行驶距离/行驶速度),其中行驶距离为曼哈顿距离,行驶速度动态配置根据里程。Anglefilteranddistancefilter方向角:司机起止线的延长线与乘客起止线的延长线之间的夹角称为方向角,图中的角coa是方向角。筛选出司机路线方向与乘客路线方向的夹角小于指定范围,且乘客起点到司机路线的最短距离小于指定值的乘客订单。上车角:连接司机起点和终点的直线与连接司机和乘客的直线之间的夹角称为上车角,图中的角CAB为上车角。筛选司机上车AC路线与司机路线AB夹角小于指定范围,或上车距离AC小于指定值的乘客订单。平顺度计算1.0定义:平顺度用于衡量司机从A_start到B_end和乘客从C_start到D_end的平顺度。仅与空间位置信息相关,与订单价格、发车时间等信息无关。以下是几种计算距离的方法1.曼哈顿距离曼哈顿距离又称出租车距离,是19世纪著名的德国犹太数学家赫尔曼明可夫斯基发明的。用于表示标准坐标系上两点的绝对轴距之和。上图中红、蓝、黄线段之间的距离称为曼哈顿距离。2.点到线的最短距离当前司机的路线是以坐标点集合的形式存储的,点到线的最短距离主要是根据乘客到司机路线的最短距离来计算。计算方式目前有两个版本,第二种方案是在第一种方案的基础上优化实现的。方案一:1、分别计算循环AB路径规划中所有点与C、D之间的最短距离,得到值S1=CE。2、AB与C、D之间的每两个相邻点分别计算为锐角。满足两个锐角的条件后,得到垂直距离S2=CG。3.比较S1和S2得到最短距离。方案二:1、优化方案1第一步,一步步计算AB和之间的点集,得到最短的点E。2、扩展E点的步长,得到DF,然后计算最短的点DF之间点集的距离。3、计算DF间点集的相邻两点间的锐角,求得垂直距离最短。4.比较第2步和第3步得到的距离,取较小的值。共享里程计算共享里程:描述司机自己的行程与司机接载乘客后的行程之间的关系,取值范围0-1,值越大,收益越高。SortingPre-sorting预排序主要用在ES召回阶段之后的拦截。前期是按照对齐度的值排序的。后来发现排序接受概率的影响还是挺大的,逐步升级预排序。新增下单价格、下单时间等特性。算法排序召回后的精细排序决定了用户的第一感知,我们要尽量保证最有可能的订单排在第一位。对于这个模块,是通过算法模型的介入来排序的。1.0的实现是从hdfs中加载pmml算法模型到本地,从es中取出recall结果后直接在本地对模型进行排序。2.0阶段将排序模块单独抽取出来作为排序服务,可以提供更多特征维度的TF深度模型计算,同时更好的提升排序精度。(本文作者:郑崇祥)本文由哈尔滨技术团队制作。未经许可,不得转载或商用。如非商业目的转载或使用本文内容,请注明“内容转载自你好技术团队”。
