導航電子地圖數據中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字符。
作者簡介