Tile38空间数据库的核心搜索功能

携手创作,共同成长!这是我参与「掘金日新计划 · 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或者lengthwidth的乘积大于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:针对deldropset三类命令进行监测;

    set命令执行时,又可能会触发以下事件:insideoutsideenterexitcross

    inside:当数据对象在指定区域时触发;

    outside:当数据对象位于指定区域之外时触发;

    enter:当数据对象之前不在指定区域内,现在进入指定区域时触发;

    exit:当数据对象之前在指定区域内,现在离开指定区域时触发;

    cross:之前不在指定区域的数据对象进入或离开该区域时触发;

    默认情况下,会监测deldropset三类命令及触发的所有事件。

    DETECT:指定触发的事件;

    COMMANDS:指定监测的命令deldropset

    一般情况下,FENCEDETECTCOMMANDS三个参数是配合使用的;

    如果我们只监测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的形式展现;POINTSBOUNDS类似

    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)
    复制代码

    WITHININTERSECTS唯一的不同就是,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可以指定一组点为中心的多个范围区域;

猜你喜欢

转载自juejin.im/post/7132497475948003342