distance

兼容特征及功能函数项

兼有功能及特征函数的功能,可以同时在filter、sort及formula表达式中使用。

其中函数参数出现的文档字段需根据对应函数文档提示,创建为索引或属性.

distance:获取两个点之间的球面距离,一般用于LBS的距离计算。

  1. 1.详细用法:

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

  3. 2.参数:

    • longitude_a:点A的经度值。支持的参数类型为浮点型的字段名

    • latitude_a:点A的纬度值。支持的参数类型为浮点型的字段名

    • longtitude_b:点B的经度值。支持的参数类型为浮点型的字段名;或者为用户查询串中kvpairs子句中设置的一个字段名(其值需要为浮点数)

    • latitude_b:点B的纬度值。支持的参数类型为浮点型的字段名;或者为用户查询串中kvpairs子句中设置的一个字段名(其值需要为浮点数)

    • outputname:如果需要在结果中返回距离值,可以通过制定outputname值得到,如果不需要,可以不指定。

  4. 3.返回值float。

  5. 实际距离值,单位为千米。

  6. 4.适用场景

  7. 场景1:查找距离用户(120.34256,30.56982)10公里内的外婆家(lon,lat为文档中记录商家的经纬度值,需要配置为属性字段),并按照距离由近及远排序;

  8. #sort子句中的写法
    query=default:’外婆家’&&
    filter=distance(lon,lat,”120.34256”,”30.56982”)<10&&
    sort=+distance(lon,lat,"120.34256","30.56982")
    
    #业务排序写法
    其中距离排序也可以采用如下方式实现,用户坐标通过kvpairs传递。
    kvpairs=longtitude_in_query:120.34256, latitude_in_query:30.56982
    精排表达式为:distance(longitude_in_doc, latitude_in_doc, longtitude_in_query, latitude_in_query, distance_value)

5.注意事项:

  • 函数参数依赖字段需创建为属性

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