一种基于Trie的空间关键词查询方法及装置与流程

文档序号:16068870发布日期:2018-11-24 12:57阅读:185来源:国知局

本发明涉及一种基于trie的空间关键词查询方法及装置,属于空间关键词查询(spatialkeywordquery)领域、基于位置的服务(location-basedservice,lbs)等领域。

背景技术

近年来,随着移动设备的普及、定位技术的快速发展,导致产生了大量基于位置的服务,如导航服务(高德地图、百度地图、腾讯地图等)根据当前的交通状态实时为用户推荐到达目的地的最优路线;社交服务(如:foursquare、twitter、微信、陌陌等)允许用户共享自己的地理位置并添加相应描述信息供其他用户参考;食住服务(如:美团外卖、饿了么、去哪儿、携程等)允许用户查询附近兴趣点;娱乐服务(如:wikitude、全城热斗等)为用户提供更逼真的游戏环境。这些lbs服务产生了大量具有位置属性的文本数据,即空间文本。面对这样的发展趋势,高效支持空间文本查询亟需高效的空间文本索引结构。根据应用场景,空间文本查询可分为空间关键词查询与分发/订阅查询。

目前,国内外对空间文本索引结构进行了广泛而又深入的研究,这些索引结构通常组合空间索引结构与文本索引结构。根据所采用的空间索引结构的不同,可将其分为:基于r-tree及其变体、grid/quad-tree、space-fillingcurve的空间文本索引;根据所采用的文本索引结构,可将其分为:基于倒排列表与签名文件的空间文本索引。空间索引与文本索引的组合方式分为:独立组合、松散组合、紧凑组合。据空间关键词查询领域国内外研究现状可知,r-tree及其变体与倒排索引组合的索引结构是主流的空间文本索引结构。r-tree的变体以面积最小原则、重叠区域最小原则、周长最小原则和存储利用率较高原则为导向对r-tree进行优化,但检索效率仍受r-tree多路径查询问题的制约。



技术实现要素:

为高效支持任意空间范围的关键词查询,本发明提供了一种基于trie的空间关键词查询方法及装置。

本发明的技术方案是:一种基于trie的空间关键词查询方法,包括:

数据预处理步骤,将数据集d中所有位置点编码成长度为n的字符串geostr,根据字符串geostr后缀ssuf按字典序对数据集d中的每行数据排序并生成编号id,每一行数据称为一条记录r,则由一至多行记录r组成的数据集称为记录集r;其中ssuf指字符串geostr的后n-m位字符,m≤n,m表示字符串geostr前缀部分的位数;

空间关键词索引建立步骤,对字符串前缀spre构建trie,trie的叶节点指向根据该域内关键词构建的倒排索引,倒排索引的列表元素为关键词及与其相对应的id列表,得到空间关键词索引结构;其中,该域指从根节点到叶节点所构成的geostr前缀sprei,sprei指第i个字符串geostr的前m位字符,spre指字符串geostr的前m位字符;

空间关键词查询步骤,检索空间关键词索引结构,获取满足查询条件的id,经过滤得到id候选集,并对候选集验证返回满足空间查询条件的位置点。

所述数据预处理步骤,具体包括如下步骤:

步骤110:给定一个由一系列位置点、关键词集构成的数据集d,通过geohash空间编码方法将数据集d中的位置点编码成长度为n的字符串geostr;其中,位置点由纬度、经度数据构成;其中geostr即geohash编码,表示geohash精度表中n对应的范围区域,

步骤120:将每一个geostr分为m位前缀部分spre和n-m位后缀部分ssuf,根据ssuf按字典序对数据集d中每行数据排序并编号id,每一行数据称为一条记录r,则由一至多行记录r组成的数据集称为记录集r;其中,r中每行数据r由id、纬度lat、经度lon、字符串geostr、关键词集items组成,items至少包含一个关键词item。

所述空间关键词索引建立步骤,具体为:

步骤210:对rspre构建trie索引结构,每个spre可映射为trie中一条从根到叶节点的路径,叶节点指向根据该域内关键词构建的倒排索引;其中,rspre表示r中所有spre,spre可称为该叶节点的前缀,该域指从根节点到叶节点所构成的前缀sprei,i表示rspre中第i个字符串;

步骤220:对ritems中每个独立元素item,构建一个由包含item的rpart.id组成的倒排列表;其中,rpart表示r中r.geostr的前m位等于sprei的r.id、r.items,r.geostr表示r的geostr,r.id表示r的id,r.items表示r的关键词集,rpart表示由一至多行rpart组成的数据集,ritems表示rpart中全部关键词,rpart.id表示rpart的id;

步骤230:对rsuf构建geostr后缀ssuf与id的映射表;其中,rsuf表示r中所有ssuf。

所述空间关键词查询步骤,具体包括如下步骤:

步骤310:给定查询位置点q、查询距离范围d、查询关键词集qitems,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash空间编码方法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域的geohash编码分别作为查询域,共9个查询域;其中,p对应的距离误差不小于d且为最小值;qitems至少由一个关键词item构成;

步骤320:检索空间关键词索引结构返回满足查询条件的id;其中,查询条件指查询域内包含全部qitems的id;

步骤330:根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围,之后按经纬度范围对与步骤320返回的id相对应的位置点进行筛选,最终得到id候选集;

步骤340:计算候选集中id对应的位置点到q的距离dq:若dq≤d,则返回该位置点,否则,不返回。

所述步骤110,包括下列步骤111、112:

步骤111:根据geohash精度表确定geohash编码长度n;

步骤112:通过geohash空间编码方法将所有位置点编码成长度为n的字符串。

通过geohash空间编码方法将位置点编码成字符串,具体为:首先,将经纬度范围看作二维平面坐标系;然后,采用二分法对经度/纬度进行划分,根据位置点经度/纬度在划分结果中的位置分别赋值0或1,直到划分次数满足对应的经/纬度位串的位数;之后,通过位交错方法合并经度位串与纬度位串;最后,通过base32编码将经纬度位串编码为相应长度的字符串。

所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经纬度位串,东/西方向的区域编码:经度位串不变,纬度位串加/减1,通过位交错方法得到该区域的经纬度位串;南/北方向的区域编码:纬度位串不变,经度位串减/加1,通过位交错方法得到该区域的经纬度位串;东北/西南方向的区域编码,经纬度位串均加/减1,通过位交错方法得到该区域的经纬度位串;东南方向的区域编码:纬度位串加1,经度位串减1,通过位交错方法得到该区域的经纬度位串;西北方向的区域编码:纬度位串减1,经度位串加1,通过位交错方法得到该区域的经纬度位串;之后,通过base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。

所述步骤320具体为:

步骤321:若d>d1,根据geohash编码检索trie选取待检索的倒排列表;反之,若d≤d1,根据geohash编码前m位检索trie选取待检索的倒排列表;

步骤322:若d>d1,检索步骤321选取的倒排列表,分别获取包含查询关键词的id列表,并求交集,即为该查询域内满足查询条件的id;反之,若d≤d1,检索步骤321选取的倒排列表,分别获取包含查询关键词的id列表,求交集得到集合sid,之后检索映射表,返回满足匹配条件的id列表,与sid求交集,即为该查询域内满足查询条件的id;其中,匹配条件指sufstr等于geohash编码末尾p-m位,sufstr表示映射表中后缀ssuf的前p-m位;

据上述方法分别获取每个查询域内满足查询条件的id,之后求并集,即为9个查询域内满足查询条件的id。

所述步骤330中,根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围方法如下:纬度的最大值maxlat=lat+range,纬度的最小值minlat=lat-range;经度的最大值maxlng=lon+lngr,经度的最小值minlng=lon-lngr;其中,lat表示查询位置点q的纬度值,lon表示查询位置点q的经度值,range=180/π*d/6372.797,lngr=range/cos(lat*π/180.0)。

一种基于trie的空间关键词查询装置,包括:

数据预处理装置,用于将数据集d中所有位置点编码成长度为n的字符串geostr,根据字符串geostr后缀ssuf按字典序对数据集d中的每行数据排序并生成编号id,每一行数据称为一条记录r,则由一至多行记录r组成的数据集称为记录集r;其中ssuf指字符串geostr的后n-m位字符,m≤n,m表示字符串geostr前缀部分的位数;

空间关键词索引建立装置,用于对字符串前缀spre构建trie,trie的叶节点指向根据该域内关键词构建的倒排索引,倒排索引的列表元素为关键词及与其相对应的id列表,得到空间关键词索引结构;其中,该域指从根节点到叶节点所构成的geostr前缀sprei,sprei指第i个字符串geostr的前m位字符,spre指字符串geostr的前m位字符;

空间关键词查询装置,用于检索空间关键词索引结构,获取满足查询条件的id,经过滤得到id候选集,并对候选集验证返回满足空间查询条件的位置点。

本发明的有益效果是:本发明可高效支持任意空间范围的关键词查询;通过空间关键词索引结构可高效支持美团外卖等lbs提供的附近兴趣点(餐饮店、公园等)查询功能,同时,存储空间开销较低;避免了r-tree的多路径查询问题;无缝融合分布式并行计算框架。

附图说明

图1是基于trie的空间关键词查询功能模块图;

图2是geohash精度表;

图3是base32编码规则图;(注:(+/-)表示加减);

图4是位置点转换为字符串图;

图5是据字符串后缀排序记录集图;

图6是trie与关键词倒排组合图;

图7是字符串后缀与id的映射图。

具体实施方式

实施例1:如图1-图7所示,一种基于trie的空间关键词查询方法,包括:数据预处理步骤,将数据集d中所有位置点编码成长度为n的字符串geostr,根据字符串geostr后缀ssuf按字典序对数据集d中的每行数据排序并生成编号id,每一行数据称为一条记录r,则由一至多行记录r组成的数据集称为记录集r;其中ssuf指字符串geostr的后n-m位字符,m≤n,m表示字符串geostr前缀部分的位数;

空间关键词索引建立步骤,对字符串前缀spre构建trie,trie的叶节点指向根据该域内关键词构建的倒排索引,倒排索引的列表元素为关键词及与其相对应的id列表,得到空间关键词索引结构;其中,该域指从根节点到叶节点所构成的geostr前缀sprei,sprei指第i个字符串geostr的前m位字符,spre指字符串geostr的前m位字符;

空间关键词查询步骤,检索空间关键词索引结构,获取满足查询条件的id,经过滤得到id候选集,并对候选集验证返回满足空间查询条件的位置点。

进一步地,可以设置所述数据预处理步骤,具体包括如下步骤:

步骤110:给定一个由一系列位置点、关键词集构成的数据集d,通过geohash空间编码方法将d中的位置点编码成长度为n的字符串geostr;其中,位置点由纬度、经度数据构成,表示poi(如:餐馆、酒店、公园等)的地理坐标,关键词集表示poi的文本属性(如:含名胜古迹的公园);geostr即geohash编码,表示geohash精度表中n对应的范围区域;进一步地,可以设置所述步骤110,包括下列步骤111、112:

步骤111、根据geohash精度表(如图2所示),将geohash编码长度n设置为8,则经纬度位串分别为20位;

步骤112、通过geohash空间编码方法将r中的位置点转换成长度为8的字符串,如图4所示,实现方法如下:

示例:(19.596412-99.219501)

首先将纬度范围(-90,90)平分成(-90,0)、(0,90)两个区间,如果目标纬度位于前一个区间,则编码为0,否则编码为1。因19.596412属于区间(0,90),所以编码为1;然后再将(0,90)分成(0,45)、(45,90)两个区间,因19.596412属于区间(0,45),所以编码为0;以此类推,直至位串长度为20。最终19.596412的编码为10011011110111101101。

经度也采取同样的方法,对范围(-180,180)依次细分至位串长度为20。最终-99.219501的编码为00111001011100011010。

接下来将经纬度位串进行合并,奇数位为纬度,偶数位为经度,得到编码0100101111000111011110110101011011011001。

最后,通过base32编码(如图3所示)得到(19.5964412-99.219501)的geohash编码为9g3rqpqt。

步骤120:将每一个geostr分为m位前缀部分spre和n-m位后缀部分ssuf,根据ssuf按字典序对d中每行数据排序并编号id,每一行数据称为一条记录r,则由一至多行记录r组成的数据集称为记录集r;将m值设置为“5”,如图5所示;其中,m≤n;r中每行数据r由id、纬度(lat)、经度(lon)、字符串(geostr)、关键词集(items)组成,items至少包含一个item;spre与ssuf亦表示区域。

进一步地,可以设置所述空间关键词索引建立步骤,具体为:

步骤210:对rspre构建trie索引结构,每个spre可映射为trie中一条从根到叶节点的路径,叶节点指向根据该域内关键词构建的倒排索引;其中,rspre表示r中所有spre,spre可称为该叶节点的前缀,该域指从根节点到叶节点所构成的前缀sprei,i表示rspre中第i个字符串;

步骤220:对ritems中每个独立元素item,构建一个由包含item的rpart.id组成的倒排列表;其中,rpart表示r中r.geostr的前m位等于sprei的r.id、r.items,r.geostr表示r的geostr,r.id表示r的id,r.items表示r的关键词集,rpart表示由一至多行rpart组成的数据集,ritems表示rpart中全部关键词,rpart.id表示rpart的id;

步骤230:对rsuf构建geostr后缀ssuf与id的映射表;其中,rsuf表示r中所有ssuf。

根据步骤210、220、230构建的空间关键词索引结构如图6、7所示,其中,图中仅给出根据r.geostr的前5位等于“9g3rq”的r.items构建的倒排列表,索引结构图呈现形式与数据集的分布、关键词类别、geohash编码长度有关。

进一步地,可以设置所述空间关键词查询步骤,具体包括如下步骤:

步骤310:给定查询位置点q、查询距离范围d、查询关键词集qitems,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash空间编码方法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域的geohash编码分别作为查询域,共9个查询域;其中,p对应的距离误差不小于d且为最小值;qitems至少由一个item构成;进一步地,可以设置所述步骤310,具体包括步骤311、步骤312:

步骤311、给定查询位置点(19.596412-99.219501)、查询距离范围500米、查询关键词{historicalsite,garden},需p对应的距离误差不小于500米且为最小值,则p值应设置为6,通过geohash算法将(19.596412-99.219501)编码为6位长度的字符串9g3rqp;

步骤312、获取9g3rqp周围8个区域的geohash编码,并将9g3rqp及其周围8个区域作为查询域,方法如下:

9g3rqp的纬度位串为100110111101111,经度位串为001110010111000。

北方区域的geohash编码:纬度位串为100110111101111,经度位串为001110010111000+1=001110010111001,经纬度位串为

010010111100011101111011010111,geohash编码为9g3rqr;

东北区域的geohash编码:纬度位串为100110111101111+1=100110111110000,经度位串为001110010111000+1=001110010111001,经纬度位串为

010010111100011101111110000010,geohash编码为9g3rw2;

东方区域的geohash编码:纬度位串为100110111101111+1=100110111110000,经度位为001110010111000,经纬度位串为010010111100011101111110000000,geohash编码为9g3rw0;

东南区域的geohash编码:纬度位串为100110111101111+1=100110111110000,经度位串为001110010111000-1=001110010110111,经纬度位串为

010010111100011101111100101010,geohash编码为9g3rtb;

南方区域的geohash编码:纬度位串为100110111101111,经度位串为001110010111000-1=001110010110111,经纬度位串为

010010111100011101111001111111,geohash编码为9g3rmz;

西南区域的geohash编码:纬度位串为100110111101111-1=100110111101110,经度位串为001110010111000-1=001110010110111,经纬度位串为

010010111100011101111001111110,geohash编码为9g3rmy;

西方区域的geohash编码:纬度位串为100110111101111-1=100110111101110,经度位为001110010111000,经纬度位串为010010111100011101111011010100,geohash编码为9g3rqn;

西北区域的geohash编码:纬度位串为100110111101111-1=100110111101110,经度位串为001110010111000+1=001110010111001,经纬度位串为

010010111100011101111011010110,geohash编码为9g3rqq。

9g3rqp周围的8个区域为:9g3rqr、9g3rw2、9g3rw0、9g3rtb、9g3rmz、9g3rmy、9g3rqn、9g3rqq;

步骤320:检索空间关键词索引结构返回满足查询条件的id;其中,查询条件指查询域内包含全部qitems的id;进一步地,可以设置所述步骤320,具体包括步骤321、步骤322:

步骤321:因500<610(d1应选取geohash长度为6所对应的距离,由图2可知,其表示范围距离610m),根据geohash编码前5位检索trie选取待检索的倒排列表;

步骤322:检索步骤321选取的倒排列表,分别获取包含查询关键词的id列表,求交集得到集合sid,之后检索映射表,返回满足匹配条件的id列表,与sid求交集,即为该查询域内满足查询条件的id;其中,sufstr表示映射表中后缀ssuf的第一位,匹配条件指sufstr等于geohash编码末尾一位;

根据m=5,查询域{9g3rqp,9g3rqr,9g3rw2,9g3rw0,9g3rtb,9g3rmz,9g3rmy,

9g3rqn,9g3rqq}可组合为{9g3rq,9g3rw,9g3rt,9g3rm},以查询域“9g3rq”为例,检索空间关键词索引结构后,包含查询关键词“historicalsite”的

id{10,14,15,17,20},包含查询关键词“garden”的id{10,14,15,17,20},求交集即得“9g3rq”域内满足查询条件的id为{10,14,15,17,20}。后缀表中以“p”为起始字符的id{11,12,13,14,15,16,17,18,19,20,21},求交集即得“9g3rqp”域内满足查询条件的id{14,15,17,20};后缀表中以“r”为起始字符的id{24,25},“9g3rqr”域内没有满足查询条件的id;后缀表中以“n”为起始字符的id{10},“9g3rqn”域内满足查询条件的id{10};后缀表中以“q”为起始字符的id{22,23},“9g3rqq”域内没有满足查询条件的id。并集为{10,14,15,17,20},即为查询域{9g3rqp,9g3rqr,9g3rqn,9g3rqq}内满足查询条件的id。

据步骤321与322所述方法,分别获取查询域内满足查询条件的id,之后求并集,即为9个查询域内满足查询条件的id{1,10,14,15,17,20,28};

步骤330、根据查询位置点(19.596412-99.219501)和查询距离范围500m确定纬度范围与经度范围,如下所示:

step1:range=180÷3.141593×0.5÷6372.797=0.004495

step2:lngr=0.004495÷cos(19.596412×3.141593÷180.0)=0.004771

step3:19.596412+0.004495=19.600907(纬度的最大值)

step4:19.596412-0.004495=19.591917(纬度的最小值)

step5:-99.219501+0.004771=-99.214730(经度的最大值)

step6:-99.219501-0.004771=-99.224272(经度的最小值)

由上可知,纬度范围为[19.591917,19.600907],经度范围为

[-99.224272,-99.214730]。根据经纬度范围对9个查询域内的id{1,10,14,15,17,20,28}进行过滤并返回经纬度范围内的位置点。如:id为28时,其纬经度为(19.589223-99.23521),19.589223不位于[19.591917,19.600907]内,故过滤id为9的位置点。经过滤后,候选集为{14,17,20}。

步骤340、计算候选集{14,17,20}中id对应的位置点(19.596412-99.219501)的距离dq,若dq<=500,则返回该位置点,实现过程如下所示:

查询条件:(19.596412-99.219501),500米;

距离计算公式:设a(x1,y1),b(x2,y2),则|ab|=(1);

根据公式(1)依次计算候选集对应的位置点与(19.596412-99.219501)的距离,返回不大于500米的位置点,经计算,满足要求的位置点集为{{19.596261-99.223194},{19.596776-99.220447},{19.596412,-99.219501}}。

故满足空间关键词查询条件的位置点为{{19.596261-99.223194},{19.596776-99.220447},{19.596412,-99.219501}}。

一种基于trie的空间关键词查询装置,包括:

数据预处理装置,用于将数据集d中所有位置点编码成长度为n的字符串geostr,根据字符串geostr后缀ssuf按字典序对数据集d中的每行数据排序并生成编号id,每一行数据称为一条记录r,则由一至多行记录r组成的数据集称为记录集r;其中ssuf指字符串geostr的后n-m位字符,m≤n,m表示字符串geostr前缀部分的位数;

空间关键词索引建立装置,用于对字符串前缀spre构建trie,trie的叶节点指向根据该域内关键词构建的倒排索引,倒排索引的列表元素为关键词及与其相对应的id列表,得到空间关键词索引结构;其中,该域指从根节点到叶节点所构成的geostr前缀sprei,sprei指第i个字符串geostr的前m位字符,spre指字符串geostr的前m位字符;

空间关键词查询装置,用于检索空间关键词索引结构,获取满足查询条件的id,经过滤得到id候选集,并对候选集验证返回满足空间查询条件的位置点。

实施例2:如实施例1,给出了d≤d1情况下,具体的实施过程,本实施例给出的是d>d1情况,采用实施例1中的数据对此处进行说明如下:给定查询位置点(19.596412-99.219501)、查询距离范围2000米、查询关键词{historicalsite,garden},由geohash精度表可知,需p对应的距离误差不小于2000且为最小值,则p值应设置为5,通过geohash算法将(19.596412-99.219501)编码为5位长度的字符串9g3rq。9g3rq周围8个区域的geohash编码为:9g3rw、9g3rx、9g3rr、9g3rp、9g3rn、9g3rj、9g3rm、9g3rt,将9g3rq及其周围8个区域作为查询域。因2000>610,根据geohash编码检索trie选取待检索的倒排列表,之后检索选取的倒排列表,分别获取包含查询关键词的id列表,并求交集,即为该查询域内满足查询条件的id。以查询域“9g3rq”为例,包含查询关键词“historicalsite”的id{10,14,15,17,20},包含查询关键词“garden”的id{10,14,15,17,20},交集为{10,14,15,17,20},即为该查询域内满足查询条件的id。据前述方法分别获取每个查询域内满足查询条件的id,之后求并集,即为9个查询域内满足查询条件的id{1,10,14,15,17,20,28}。

上面结合图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1