导航电子地图数据中POI搜索技术原理之二
支持任意检索
《浅谈导航数据中POI搜索技术原理》一文介绍了导航电子地图中POI兴趣点数据进行关键字检索的基本原理。
其中,数据的组织方式如下:
图1
当用户仅仅输入单个字符Key1的时候,通过查找索引表,获取对用的偏移表,然后取到包含Key1的所有POI数据。
但是,当用户输入两个或者两个以上的字符的时候,如果依然基于《浅谈导航数据中POI搜索技术原理》文中的数据组织方式,检索的过程如下(这里以两个字符为例):
通过对Key1和Key2的检索,分别得到两个offset的集合S1和S2。
对S1和S2求交集,就获取了所有包含Key1和Key2的POI对应的offset。
但是,对于用户而言,可能用户仅仅希望检索到类似“*Key1 Key2*”方式排列的POI,而不希望检索到类似“* Key2Key1*”方式排列的POI。例如,当用户输入“北京”来进行检索的时候,用户期望出现的是类似“北京大学”、“北京火车站”等类似的POI,而不是期望出现“京北驾校”、“京北职业技术学院”等类似的POI。针对此类问题,改如何设计一个合适的数据组织方式来对应呢?
这里,基于《浅谈导航数据中POI搜索技术原理》文中的数据组织方式,稍微做一定的优化,即可解决此方面的问题:
OffsetTable
index | Address in binary file | Pos |
1 | POI Address | A |
2 | POI Address | B |
…… | …… | ^ |
N | POI Address | C |
这里,Pos表示的是Key字符在POI的字符串中,所处的位置。例如,“京”在“北京大学”中的位置是2。
如此的话,在检索“Key1 Key2”的时候,通过对Key1和Key2的检索,分别得到两个offset的集合S1和S2。
在对S1和S2求交集的时候,通过使用Pos来进行约束,这样,就可以约束到仅仅查询类似“*Key1 Key2*”方式排列的POI。
小结一下,经过改善之后的设计,有以下两个特点:
1 当输入“Key1 Key2”的时候,能过滤掉包含“Key2Key1”的POI字符,仅仅检索包含“Key1 Key2”的POI名称;
2 当输入“Key1 Key2”的时候,能检索到包含“****Key1 ****Key2****”模式的POI字符。
作者简介