功能函数项

插件功能函数可以用在filter子句作为过滤和筛选条件,而返回值为数值型的功能函数在sort子句中,用来做排序。

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

in_polygon : 判断某个点是否在某个多边形范围内,一般用于配送范围判断

1.详细用法:

in_polygon(polygon_field, user_x_coordinate, user_y_coordinate, has_multi_polygons=”false”)

2.参数:

  • polygon_field: 表示商家配送范围的字段名,类型必须为DOUBLE_ARRAY, 字段值依次为配送多边形有序定点的x,y坐标(先x后y),顶点务必保证有序(顺时针、逆时针均可),如果有多个(N个)配送多边形,则第一个值表示多边形个数,第2~N+1的值表示后续每个多边形的顶点数(不是坐标数哦!!),第N+2值开始依次表示各多边形的顶点x,y坐标(N的值域为[1,50]

1

  • user_x_coordinate: 用户的x坐标, double类型

  • user_y_coordinate: 用户的y坐标, double类型

  • has_multi_polygons:表示polygon_filed是否包含多个独立的多边形需要判断。默认为false,表示只有单一的多边形。

3.返回值:

int,在多边形内返回第几个多边形匹配, 否则返回0。

4.适用场景:

场景1:判断用户是否在商家的配送范围。如商家配送范围的字段为coordinates, 用户位置坐标为 (120.307234, 39.294245),则过滤在配送范围内的商家查询可写为:

 query=default:’美食’&&filter=in_polygon(coordinates, 120.307234, 39.294245)>0

5.注意事项:

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

  • 最多支持50个多边形,超过则跳过该文档的计算;

  • 不支持有孔多边形,如环;

  • 不支持多个分离部分的多边形;

  • 坐标个数为0,表示没有坐标,返回0;

  • 坐标个数为奇数个,则认为数据有误,返回0;

  • 用户点位于多边形边上,则认为匹配成功,返回为1(或具体多边形下标)。

  • 多边形插件计算量较大,对查询性能有影响,建议尽量控制顶点个数,具体值请根据自己实际情况进行测试得出。