携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情
-
INTERSECTS
搜索包含在区域内的数据对象或与指定边界区域相交的数据对象;
INTERSECTS key [CURSOR start] [BUFFER meters] [LIMIT count] [MATCH pattern] [WHERE field min max ...] [WHEREIN field count value [value...] ...] [WHEREEVAL script numargs arg [arg...] ...] [WHEREEVALSHA sha1 numargs arg [arg...] ...] [CLIP] [NOFIELDS] [FENCE] [DETECT what] [COMMANDS which] [COUNT|IDS|OBJECTS|POINTS|BOUNDS|(HASHES precision)] (GET key id)|(BOUNDS minlat minlon maxlat maxlon)|(OBJECT geojson)|(CIRCLE lat lon meters)|(TILE x y z)|(QUADKEY quadkey)|(HASH geohash)|(SECTOR lat lon meters bearing1 bearing2) 复制代码
CURSOR:从搜索结果中的第几个索引位开始返回结果;
BUFFER:围绕搜索区域增加缓冲区;在WITHIN和INTERSECTS命令中使用;
LIMIT:限制查询结果的返回数量,默认是100;
MATCH:使用正则表达式匹配
id
;相当于对id
的条件查询;WHERE:条件语句,
WHERE speed 70 +inf WHERE age -inf 24
相当于查询速度大于70,并且年龄小于24的结果;WHEREIN:条件语句,
where wheels 3 14 18 22
相当于查询wheels
的值在14或18或22的数据,其中参数3代表后面数字的个数;WHEREEVAL:条件语句,和
WHERE
类似,不过这个查询可以使用LUA脚本;whereeval "return FIELDS.wheels > ARGV[1] or (FIELDS.length * FIELDS.width) > ARGV[2]" 2 8 120
表示查询wheels
字段值大于8或者length
和width
的乘积大于120的数据;其中参数2代表参数个数;WHEREEVALSHA:条件语句,和
WHEREEVAL
类似,只不过把LUA脚步提前载入了服务器,转化成目标SHA;WHEREEVALSHA 232fd51614574cf0867b83d384a5e898cfd24e5a 2 8 120
表示执行服务器中的指定脚本语句,需要2个参数,参数值分别是8和120;脚本可通过
SCRIPT LOAD script
命令提前导入;CLIP:目前还没测试出来具体有啥效果;后续有结果会更新;
NOFIELDS:告知服务器返回值当中不要包含
FIELD
对应的字段和值;比如SET fleet my_field FIELD speed 90 POINT 33.462 -112.268
在查询结果中,同时会把对应的speed 90
这个FIELD
给带上;如果查询参数中带有NOFIELDS
,那么结果中就不会有FIELD
字段;FENCE:针对
del
、drop
、set
三类命令进行监测;set
命令执行时,又可能会触发以下事件:inside
、outside
、enter
、exit
、cross
;inside
:当数据对象在指定区域时触发;outside
:当数据对象位于指定区域之外时触发;enter
:当数据对象之前不在指定区域内,现在进入指定区域时触发;exit
:当数据对象之前在指定区域内,现在离开指定区域时触发;cross
:之前不在指定区域的数据对象进入或离开该区域时触发;默认情况下,会监测
del
、drop
、set
三类命令及触发的所有事件。DETECT:指定触发的事件;
COMMANDS:指定监测的命令
del
、drop
、set
;一般情况下,
FENCE
、DETECT
、COMMANDS
三个参数是配合使用的;如果我们只监测
set
命令触发的enter
事件,命令如下:SETCHAN warehouse NEARBY fleet FENCE DETECT enter COMMANDS set POINT 33.462 -112.268 6000
该命令会将fleet中的数据对象因为
set
命令进入点位33.462 -112.268六公里范围内触发的enter
事件发送到warehouse
通道中;[COUNT|IDS|OBJECTS|POINTS|BOUNDS|(HASHES precision)] :设置查询的结果的表达形式;
COUNT
表示结果数据;IDS
表示结果的id
列表;OBJECTS
表示以OBJECT
的形式展现;POINTS
和BOUNDS
类似HASHES precision
:表示以Geohash的方式展现,precision代表精度,使用数字表示;(GET key id)|(BOUNDS minlat minlon maxlat maxlon)|(OBJECT geojson)|(CIRCLE lat lon meters)|(TILE x y z)|(QUADKEY quadkey)|(HASH geohash)|(SECTOR lat lon meters bearing1 bearing2)
以上都代表指定的区域范围。
GET key id
表示从内存中找到已经存储好的区域范围;BOUNDS
表示一个矩形区域范围;OBJECT
可以表示一个多边形区域;CIRCLE
表示圆形区域;TILE
:区域的另一种表达形式;QUADKEY
:区域的另一种表达形式;SECTOR
表示扇形区域; -
WITHIN
搜索包含在区域内的数据对象
WITHIN key [CURSOR start] [LIMIT count] [MATCH pattern] [WHERE field min max ...] [WHEREIN field count value [value...] ...] [WHEREEVAL script numargs arg [arg...] ...] [WHEREEVALSHA sha1 numargs arg [arg...] ...] [NOFIELDS] [FENCE] [DETECT what] [COMMANDS which] [COUNT|IDS|OBJECTS|POINTS|BOUNDS|(HASHES precision)] (GET key id)|(BOUNDS minlat minlon maxlat maxlon)|(OBJECT geojson)|(CIRCLE lat lon meters)|(TILE x y z)|(QUADKEY quadkey)|(HASH geohash)|(SECTOR lat lon meters bearing1 bearing2) 复制代码
WITHIN
与INTERSECTS
唯一的不同就是,WITHIN
只监测包含在指定区域的数据对象,而INTERSECTS
还要监测与指定区域相交的数据对象。 -
NEARBY
搜索靠近指定点范围内的数据对象;最靠近的在最前面;
NEARBY key [CURSOR start] [LIMIT count] [MATCH pattern] [DISTANCE] [WHERE field min max ...] [WHEREIN field count value [value...] ...] [WHEREEVAL script numargs arg [arg...] ...] [WHEREEVALSHA sha1 numargs arg [arg...] ...] [NOFIELDS] [FENCE] [DETECT what] [COMMANDS which] [COUNT|IDS|OBJECTS|POINTS|BOUNDS|(HASHES precision)] (POINT lat lon meters)|(ROAM key pattern meters) 复制代码
NEARBY
命令所对应的指定区域一定是以POINT
为中心的的范围区域;ROAM key pattern meters:这个参数与
POINT lat lon meters
参数只能二选一,ROAM
可以指定一组点为中心的多个范围区域;