梁 明,羅 榮,胡 最
(1.南京師范大學(xué)虛擬地理環(huán)境教育部重點(diǎn)實(shí)驗(yàn)室,江蘇 南京 210023;2.華中師范大學(xué)城市與環(huán)境科學(xué)學(xué)院,湖北 武漢 430079)
基于Lucene和PostGIS的地圖搜索研究
梁 明1,羅 榮2,胡 最1
(1.南京師范大學(xué)虛擬地理環(huán)境教育部重點(diǎn)實(shí)驗(yàn)室,江蘇 南京 210023;2.華中師范大學(xué)城市與環(huán)境科學(xué)學(xué)院,湖北 武漢 430079)
基于網(wǎng)絡(luò)的地圖搜索是空間信息共享和互操作的基礎(chǔ),隨著移動(dòng)互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)地圖搜索更成為人們獲取空間信息的重要手段和網(wǎng)絡(luò)入口。本文分析了當(dāng)前主流的客戶端/數(shù)據(jù)庫(kù)模式的WebGIS地圖搜索的不足與瓶頸,構(gòu)建了客戶端/ Lucene/數(shù)據(jù)庫(kù)的三元模式的地圖搜索架構(gòu);探討實(shí)現(xiàn)了PostGIS中地理對(duì)象到Lucene索引的映射機(jī)制,并針對(duì)Web客戶端對(duì)檢索結(jié)果矢量要素傳輸和渲染能力的不足,提出基于拓?fù)洳僮鞯氖噶恳貏?dòng)態(tài)加載機(jī)制。本文提高了用戶檢索的靈活性和檢索結(jié)果的針對(duì)性、有效性,為智慧城市建設(shè)和WebGIS的應(yīng)用提供了更好的支持。
地圖搜索;WebGIS;全文檢索;PostGIS;Lucene
隨著萬(wàn)維網(wǎng)和移動(dòng)互聯(lián)技術(shù)的發(fā)展,網(wǎng)絡(luò)已經(jīng)成為人們獲取信息的重要手段。面對(duì)浩如煙海的網(wǎng)絡(luò)信息,如何及時(shí)準(zhǔn)確地獲取人們最為關(guān)心、最有價(jià)值的資訊,成為對(duì)“搜索引擎”這一網(wǎng)絡(luò)第一入口的核心要求。眾所周知,地球上80%左右的信息都與空間位置有關(guān),自從Google Maps誕生以來,基于WebGIS和移動(dòng)GIS的地圖搜索就成為人們獲取空間位置信息及日常出行交通咨詢的重要手段[1-2]。因此國(guó)內(nèi)外學(xué)者對(duì)WebGIS的理論與方法進(jìn)行了深入而廣泛的研究。從基于SVG/GML的客戶端表達(dá)與渲染到基于金字塔結(jié)構(gòu)的服務(wù)端瓦片式WMS服務(wù)發(fā)布,從WFS-T的在線編輯到WPS的地理信息服務(wù)標(biāo)準(zhǔn),一系列的研究與實(shí)踐極大地促進(jìn)了Web-GIS的發(fā)展。然而,盡管WebGIS的發(fā)展取得了長(zhǎng)足的進(jìn)步,仍然不能夠滿足人們對(duì)地圖搜索的需求。究其原因主要在于WebGIS的地圖搜索主要集中在對(duì)地理對(duì)象幾何特征的研究與優(yōu)化,如基于Markov模型的切片動(dòng)態(tài)預(yù)加載[3]、POI的服務(wù)端優(yōu)化等[4],卻較少對(duì)地圖搜索中地理對(duì)象的語(yǔ)義特征進(jìn)行詳細(xì)深入的研究。目前的WebGIS地圖搜索仍然是基于關(guān)鍵字匹配的方式,即在不同字段間查找符合輸入關(guān)鍵字匹配要求的地理對(duì)象,無法支持復(fù)雜語(yǔ)義的查詢。盡管D.Mark與M.Egenhofer[5]、杜沖[6]、徐愛萍[6]等對(duì)地理對(duì)象及其空間關(guān)系的語(yǔ)義特征進(jìn)行了相關(guān)研究,然而仍停留在理論探索階段,而針對(duì)基于WebGIS地圖搜索具體實(shí)現(xiàn)方法和手段的研究卻缺乏,難以支撐日益迫切的地圖搜索需求。
本文針對(duì)地圖搜索的需求,在分析傳統(tǒng)地圖搜索存在問題與不足的基礎(chǔ)上,基于開源框架搭建了WebGIS地圖搜索系統(tǒng);并引入Lucene全文搜索引擎,探討了Lucene索引與PostGIS空間數(shù)據(jù)庫(kù)的映射機(jī)制,增強(qiáng)了地圖搜索引擎構(gòu)建復(fù)雜、靈活查詢的能力,改善了用戶體驗(yàn),提高了人們獲取有效信息的效率。
1.當(dāng)前地圖搜索的瓶頸與不足
傳統(tǒng)的地圖搜索基本遵循以下步驟:首先,提供UI界面,接收用戶輸入搜索關(guān)鍵詞;其次,將用戶輸入的關(guān)鍵詞構(gòu)造為查詢字符串,如利用“l(fā)ike”“?”“?”等通配符對(duì)關(guān)鍵詞進(jìn)行簡(jiǎn)單的擴(kuò)展;再次,基于Ajax發(fā)起檢索請(qǐng)求,由服務(wù)端到數(shù)據(jù)庫(kù)的特定字段去查詢與擴(kuò)展后的關(guān)鍵詞相匹配的對(duì)象,并返回搜索結(jié)果[1,7]。這樣做有3個(gè)明顯的缺陷:一是由通配符簡(jiǎn)單擴(kuò)展的關(guān)鍵詞需要遍歷數(shù)據(jù)庫(kù)中的每個(gè)字段,并逐一比較,整個(gè)搜索結(jié)果非常耗時(shí),特別是對(duì)于非結(jié)構(gòu)化的長(zhǎng)文本字段,耗時(shí)更為嚴(yán)重;二是由于缺乏必要的分詞方法,對(duì)于用戶復(fù)雜的查詢欠缺支持,如無法實(shí)現(xiàn)類似“航天橋的收費(fèi)停車場(chǎng)”“酒店折扣”等的復(fù)雜語(yǔ)義查詢;三是由于搜索關(guān)鍵詞直接映射到特定的數(shù)據(jù)庫(kù)字段,系統(tǒng)耦合緊密,系統(tǒng)擴(kuò)展、更新等缺乏靈活性。
2.基于Lucene的全文檢索
全文檢索是指計(jì)算機(jī)索引程序通過掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式[8-9]。Lucene是著名的全文檢索工具包,具有開源、高效、易擴(kuò)展等諸多優(yōu)異特性。不同于基于數(shù)據(jù)庫(kù)的關(guān)鍵字檢索方式,Lucene除了提供“通配符搜索”以外,還支持“布爾搜索”“范圍搜索”“前綴搜索”“短語(yǔ)搜索”和“模糊搜索”等豐富的搜索方式,不但顯著提高了用戶的搜索體驗(yàn),而且能夠?yàn)橛脩籼峁﹤€(gè)性化的搜索結(jié)果。此外,Lucene還提供多域搜索功能,克服了針對(duì)數(shù)據(jù)庫(kù)單一字段搜索或構(gòu)造復(fù)雜的SQL表達(dá)式的局限,顯著提高了搜索效率。
圖1清晰地表達(dá)了傳統(tǒng)基于WebGIS的地圖搜索與基于Lucene的地圖搜索流程的不同。基于瀏覽器/數(shù)據(jù)庫(kù)兩層架構(gòu)的傳統(tǒng)地圖搜索方式(如圖1(a)所示),直接將用戶查詢的搜索請(qǐng)求以Ajax方式發(fā)送到服務(wù)端,并經(jīng)由服務(wù)組件解析直接映射為數(shù)據(jù)庫(kù)查詢的SQL語(yǔ)句。因此,其查詢可以抽象為“Select?from theme1_layer where field1 like關(guān)鍵詞”的模式,查詢的構(gòu)造和查詢效率完全依賴于數(shù)據(jù)庫(kù)的SQL語(yǔ)句支持,難以構(gòu)造復(fù)雜、靈活的查詢。而基于“瀏覽器/Lucene/數(shù)據(jù)庫(kù)”的3層架構(gòu)的地圖搜索(如圖1(b)所示),則首先通過Hibernate、iBatis等ORM中間層或直接利用JDBC的方式,將數(shù)據(jù)庫(kù)中地理對(duì)象的語(yǔ)義文本映射為L(zhǎng)ucene的Document,并在此基礎(chǔ)上構(gòu)造基于倒排序方法的索引[9]。隨后,用戶發(fā)起的查詢請(qǐng)求經(jīng)過Lucene的分詞、優(yōu)化,再到索引中去進(jìn)行匹配,并依據(jù)匹配度排序返回相應(yīng)的結(jié)果。Lucene基于倒排序的反向索引機(jī)制不但保證了優(yōu)異的檢索效率,同時(shí)提供了靈活多樣的查詢檢索方法,從而可以讓用戶輸入更加精確的語(yǔ)義描述文本,提供查詢結(jié)果的命中率和有效性。Lucene在提供以上高效靈活的搜索功能的同時(shí),通過設(shè)計(jì)簡(jiǎn)潔的API接口為用戶屏蔽了復(fù)雜的索引構(gòu)造和技術(shù)實(shí)現(xiàn)細(xì)節(jié),提高了將Lucene嵌入現(xiàn)有地圖搜索的便捷性。
3.PostGIS與地圖搜索
PostGIS是知名的開源“對(duì)象—關(guān)系”數(shù)據(jù)庫(kù)PostgreSQL的空間擴(kuò)展,它采用面向?qū)ο蟮姆绞綌U(kuò)展存儲(chǔ)空間數(shù)據(jù),全面支持OGC的Geometry空間數(shù)據(jù)模型。同時(shí),除了對(duì)SQL89和SQL92的支持外,PostGIS還提供豐富的空間數(shù)據(jù)操作函數(shù),以支持對(duì)空間數(shù)據(jù)的維護(hù)、檢索及空間運(yùn)算。由于Post-GIS性能優(yōu)異,在其基礎(chǔ)上衍生出了更多的擴(kuò)展,如基于Dijkstra算法實(shí)現(xiàn)的pgrouting擴(kuò)展模塊[10]、用于實(shí)現(xiàn)基于SQL的最短路徑查找功能。PostGIS支持WKT、GML、KML、GeoJSON等多種空間數(shù)據(jù)格式的存儲(chǔ)與輸出,為構(gòu)建WebGIS提供了很好的支持。由于對(duì)GML和GeoJSON的完美支持,利用WFS向PostGIS存取空間數(shù)據(jù)變得異常方便。對(duì)于地理對(duì)象,可以將其屬性字段(描述了相應(yīng)的語(yǔ)義信息)和幾何信息存儲(chǔ)在同一條記錄內(nèi),這種“屬性—幾何”的一體化存儲(chǔ)方式,為基于文本的全文檢索提供了遍歷;通過倒排序索引檢索到語(yǔ)義文本對(duì)應(yīng)的記錄后,可以直接提取相應(yīng)的幾何信息,并顯示在地圖上。

圖1 搜索流程對(duì)比
1.模型架構(gòu)
基于Lucene的3層架構(gòu)的WebGIS地圖搜索在傳統(tǒng)WebGIS的架構(gòu)基礎(chǔ)上,增加了Lucene全文搜索引擎作為中間層,從而形成了客戶端(至少包括搜索結(jié)果列表和地圖兩部分)、Lucene(負(fù)責(zé)索引的構(gòu)造與查詢的解析)、服務(wù)端(Tomcat支持下的一系列Servlet和JavaBean負(fù)責(zé)的WMS、WFS等地圖服務(wù),以及PostGIS空間數(shù)據(jù)庫(kù)支持的空間數(shù)據(jù)管理) 3層架構(gòu)體系,如圖2所示。首先,將PostGIS中存儲(chǔ)的地理對(duì)象的屬性字段映射為L(zhǎng)ucene中Field的一條記錄的所有字段,共同構(gòu)成一個(gè)Document;然后,利用Lucene自帶的索引創(chuàng)建功能,構(gòu)造基于<關(guān)鍵字,文檔>的倒排序結(jié)構(gòu)的索引,客戶端發(fā)起檢索時(shí),先由Lucene.Analyzer進(jìn)行分詞和分析優(yōu)化,再用Query發(fā)起對(duì)Index索引的檢索和匹配;最后按照匹配度反饋檢索結(jié)果到用戶前端。用戶點(diǎn)擊相應(yīng)的鏈接,發(fā)起WFS請(qǐng)求,從PostGIS中獲取GML和地理對(duì)象的詳細(xì)信息。可見,基于Lucene的3層架構(gòu)將用戶查詢的分詞、全文檢索都交由Lucene中間層來完成,既提高了查詢的靈活性,更將查詢和數(shù)據(jù)庫(kù)的二元模式進(jìn)行了解耦,實(shí)現(xiàn)了系統(tǒng)的松耦合,易于維護(hù)和擴(kuò)展。

圖2 基于Lucene和PostIGIS的地圖搜索系統(tǒng)架構(gòu)
2.關(guān)鍵問題
Lucene是優(yōu)秀的全文檢索引擎工具包,基于Lucene的文本搜索可以完成地圖搜索的絕大部分功能。然而其中有兩個(gè)關(guān)鍵問題是基于PostGIS的地圖搜索所需要特別關(guān)注的:一是空間數(shù)據(jù)庫(kù)向Lucene索引的映射;二是查詢結(jié)果的表達(dá),特別是矢量要素的獲取與表達(dá)。
Hibernate與iBatis都是優(yōu)秀的持久層框架,是實(shí)現(xiàn)數(shù)據(jù)庫(kù)向Lucene映射的重要手段。PostGIS提供了眾多實(shí)用的空間數(shù)據(jù)操作函數(shù),因此充分利用PostGIS的空間操作函數(shù)對(duì)于WebGIS搜索引擎至關(guān)重要。由于Hibernate、Apache OJB等ORM框架對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)的封裝過于完備,因此雖然大大降低了常規(guī)數(shù)據(jù)庫(kù)開發(fā)的工作量,卻也損失了靈活性[11]。iBatis是“半自動(dòng)”的持久層框架,其重要的特點(diǎn)就是能夠手動(dòng)編輯SQL語(yǔ)句,這為充分利用PostGIS自定義的空間數(shù)據(jù)操作函數(shù)提供了可能,成為基于PostGIS的WebGIS持久層的可靠選擇。以下語(yǔ)句說明了SQL語(yǔ)句的自定義的方法:

Lucene實(shí)現(xiàn)了按詞頻和關(guān)鍵詞在文本中出現(xiàn)的位次對(duì)查詢與文本進(jìn)行匹配和排序的機(jī)制,為用戶提供在語(yǔ)義上最接近用戶意愿的查詢結(jié)果。用戶根據(jù)輸出的結(jié)果,點(diǎn)擊相應(yīng)的鏈接即可定位到對(duì)應(yīng)的地理對(duì)象。在給出文本結(jié)果列表的同時(shí),也可以給出基于SVG的地理對(duì)象的矢量表達(dá)(類似Google Maps上的POI點(diǎn)的展示)。而當(dāng)?shù)乩韺?duì)象比較復(fù)雜、矢量數(shù)據(jù)量較大時(shí),一次性全部記載會(huì)增加網(wǎng)絡(luò)傳輸壓力和瀏覽器的渲染壓力,嚴(yán)重影響用戶體驗(yàn),因此需要研究?jī)?yōu)化機(jī)制。本文提出了基于視圖范圍的動(dòng)態(tài)矢量加載機(jī)制,即根據(jù)當(dāng)前視圖范圍外包矩形與所有檢索結(jié)果集進(jìn)行拓?fù)洹敖弧边\(yùn)算,獲取當(dāng)前視圖范圍內(nèi)的要素,以WFS的方式傳輸?shù)角岸耍⒁許VG的方式進(jìn)行矢量渲染(如圖3所示)。這種動(dòng)態(tài)加載機(jī)制保證了在當(dāng)前視圖內(nèi)只需要渲染有限少量的矢量要素,提高了要素傳輸和渲染效率。當(dāng)用戶點(diǎn)擊文本鏈接時(shí),用與該鏈接綁定的要素FID,構(gòu)造WFS請(qǐng)求,單獨(dú)獲取該要素的GML數(shù)據(jù)定位到其Feature.Extent,加載顯示。

圖3 基于WFS的矢量要素動(dòng)態(tài)加載
本研究確立了通過引入Lucene全文搜索中間件,擴(kuò)展基于PostGIS的地圖搜索功能的目標(biāo)。首先,利用Tomcat和Geoserver搭建服務(wù)端,將基于iBatis的PostGIS作為持久化存儲(chǔ)層;再通過JavaBean連接服務(wù)端與Lucene的分詞、優(yōu)化和索引服務(wù);最后在前端基于JavaScript和Ajax機(jī)制實(shí)現(xiàn)地圖的全文搜索和圖形的瀏覽、定位與查詢。試驗(yàn)以北京市某WebGIS管理系統(tǒng)為例,通過引入Lucene支持的全文檢索機(jī)制,有效提高了查詢的靈活性,可以構(gòu)造類似“飯店收費(fèi)停車”這種跨字段的查詢請(qǐng)求(如圖4所示)。通過Lucene可以有效解決關(guān)鍵詞次序不確定性和跨字段查詢(通過Lucene的多域查詢機(jī)制)的問題。系統(tǒng)以酒店、停車場(chǎng)、道路等多個(gè)圖層數(shù)據(jù)為檢索對(duì)象,在實(shí)現(xiàn)文本檢索的同時(shí),優(yōu)化了對(duì)大數(shù)據(jù)量的矢量顯示和動(dòng)態(tài)加載,有效改善了用戶體驗(yàn)。
本文分析了基于客戶端/數(shù)據(jù)庫(kù)二元結(jié)構(gòu)的WebGIS地圖搜索的不足與原因,引入Lucene全文搜索引擎,通過構(gòu)造PostGIS數(shù)據(jù)庫(kù)到Lucene索引的有效映射機(jī)制,實(shí)現(xiàn)了地圖信息的全文搜索。該方法能夠支持靈活、復(fù)雜的查詢語(yǔ)句構(gòu)造,便于用戶快速檢索到更加符合自身需求的地理空間信息;同時(shí),通過設(shè)計(jì)矢量要素的動(dòng)態(tài)加載機(jī)制,有效改進(jìn)了檢索要素的加載和渲染效率,改善了用戶體驗(yàn)。隨著移動(dòng)互聯(lián)網(wǎng)和LBS的發(fā)展,對(duì)地理信息搜索的要求會(huì)進(jìn)一步提高,引入全文檢索機(jī)制后能夠促進(jìn)WebGIS和地理信息技術(shù)的發(fā)展;特別是由于長(zhǎng)文本字段的檢索,基于Lucene全文檢索機(jī)制的檢索效率提高尤為突出。同時(shí),對(duì)于類似Google Earth上用戶自身添加和標(biāo)注的半結(jié)構(gòu)化、非結(jié)果化信息的檢索,以及地理事件監(jiān)控、基于Web的空間信息挖掘等,本文提出的方法和實(shí)踐可以作為此類研究與應(yīng)用的重要基礎(chǔ)。

圖4 基于Lucene的全文檢索WebGIS前端界面
本文的研究實(shí)現(xiàn)了地圖搜索功能的增強(qiáng),但僅僅通過對(duì)空間數(shù)據(jù)庫(kù)中的地理對(duì)象屬性字段建立基于倒排序的全文索引,并未真正引入語(yǔ)義解析模塊。如搜索“車庫(kù)”與“停車場(chǎng)”,搜索引擎并不能理解二者在語(yǔ)義上的相似性[12],僅能從文本匹配的角度去匹配搜索。下一步的研究需要引入語(yǔ)義解析模塊[12],進(jìn)一步提高搜索結(jié)果的查全率。此外,基于自然語(yǔ)言的空間關(guān)系推理越來越受到重視,類似“校園東邊的籃球場(chǎng)”等描述空間關(guān)系的語(yǔ)義搜索,也需要進(jìn)一步深入探討。這樣才能真正回答T.S.Eliot的追問“知識(shí)中我們丟失的智慧該到哪里去找”,從而不斷提高地圖搜索的智能化水平。
[1] 白玉琪,楊崇俊,劉冬林,等.基于OpenGIS WMS的空間信息搜索引擎系統(tǒng)原型[J].中國(guó)圖象圖形學(xué)報(bào),2004,9(1):105-111.
[2] 艾菊梅,周書民,彭健.基于MMS和WebGIS的移動(dòng)搜索[J].計(jì)算機(jī)工程,2008,34(22):256-257.
[3] 李云錦,鐘耳順,王爾琪,等.馬爾可夫模型在空間數(shù)據(jù)預(yù)取中的應(yīng)用[J].測(cè)繪通報(bào),2010(7):1-4.
[4] 虞昌彬,胡喬,任福,等.利用B/S架構(gòu)的POI信息組織方法及可視化策略研究[J].武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2012,37(2):233-236.
[5] MARK D M,EGENHOFER M J.Modeling Spatial Relations between Lines and Regions:Combining Formal Mathematical Models and Human Subjects Testing[J]. Cartography and Geographic Information Systems,1994,21(4):195-212.
[6] 杜沖,司望利,許珺.基于地理語(yǔ)義的空間關(guān)系查詢和推理[J].地球信息科學(xué),2010,12(1):48-55.
[7] 周文生.基于SVG的WebGIS研究[J].中國(guó)圖象圖形學(xué)報(bào),2002,7(7):693-698.
[8] 李永春,丁華福.Lucene的全文檢索的研究與應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(2):12-15.
[9] 鄭榕增,林世平.基于Lucene的中文倒排索引技術(shù)的研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(3):80-83.
[10] 張玢.基于PostGIS的海岸保護(hù)與利用規(guī)劃空間數(shù)據(jù)庫(kù)設(shè)計(jì)與實(shí)現(xiàn)[D].沈陽(yáng):遼寧師范大學(xué),2009.
[11] 陽(yáng)奇,林鎮(zhèn)燦,黃帆,等.基于Hibernate搜索的數(shù)據(jù)庫(kù)全文檢索系統(tǒng)[J].計(jì)算機(jī)工程,2010,36(4):74-76.
[12] LUACES M R,PARAMá J R,PEDREIRA O,et al. An Ontology-based Index to Retrieve Documents with Geographic Information[C]∥Scientific and Statistical Database Management.[S.l.]:Springer,2008:384-400.
Map Search Based on Lucene and PostGIS
LIANG Ming,LUO Rong,HU Zui
P289
B
0494-0911(2014)11-0042-04
2013-12-11
國(guó)家自然科學(xué)基金(41201398);教育部人文社科課題(12YJCZH073);湖南省“傳統(tǒng)聚落數(shù)字化保護(hù)技術(shù)”工程實(shí)驗(yàn)室開放基金(CT14K09)
梁 明(1984—),男,安徽六安人,博士生,研究方向?yàn)榭臻g數(shù)據(jù)庫(kù)與數(shù)據(jù)挖掘、3DGIS。
羅 榮
梁明,羅榮,胡最.基于Lucene和PostGIS的地圖搜索研究[J].測(cè)繪通報(bào),2014(11):42-45.
10.13474/j.cnki.11-2246.2014.0359