梁 明,罗 荣,胡 最
(1.南京师范大学虚拟地理环境教育部重点实验室,江苏 南京 210023;2.华中师范大学城市与环境科学学院,湖北 武汉 430079)
基于Lucene和PostGIS的地图搜索研究
梁 明1,罗 荣2,胡 最1
(1.南京师范大学虚拟地理环境教育部重点实验室,江苏 南京 210023;2.华中师范大学城市与环境科学学院,湖北 武汉 430079)
基于网络的地图搜索是空间信息共享和互操作的基础,随着移动互联网技术的快速发展,网络地图搜索更成为人们获取空间信息的重要手段和网络入口。本文分析了当前主流的客户端/数据库模式的WebGIS地图搜索的不足与瓶颈,构建了客户端/ Lucene/数据库的三元模式的地图搜索架构;探讨实现了PostGIS中地理对象到Lucene索引的映射机制,并针对Web客户端对检索结果矢量要素传输和渲染能力的不足,提出基于拓扑操作的矢量要素动态加载机制。本文提高了用户检索的灵活性和检索结果的针对性、有效性,为智慧城市建设和WebGIS的应用提供了更好的支持。
地图搜索;WebGIS;全文检索;PostGIS;Lucene
随着万维网和移动互联技术的发展,网络已经成为人们获取信息的重要手段。面对浩如烟海的网络信息,如何及时准确地获取人们最为关心、最有价值的资讯,成为对“搜索引擎”这一网络第一入口的核心要求。众所周知,地球上80%左右的信息都与空间位置有关,自从Google Maps诞生以来,基于WebGIS和移动GIS的地图搜索就成为人们获取空间位置信息及日常出行交通咨询的重要手段[1-2]。因此国内外学者对WebGIS的理论与方法进行了深入而广泛的研究。从基于SVG/GML的客户端表达与渲染到基于金字塔结构的服务端瓦片式WMS服务发布,从WFS-T的在线编辑到WPS的地理信息服务标准,一系列的研究与实践极大地促进了Web-GIS的发展。然而,尽管WebGIS的发展取得了长足的进步,仍然不能够满足人们对地图搜索的需求。究其原因主要在于WebGIS的地图搜索主要集中在对地理对象几何特征的研究与优化,如基于Markov模型的切片动态预加载[3]、POI的服务端优化等[4],却较少对地图搜索中地理对象的语义特征进行详细深入的研究。目前的WebGIS地图搜索仍然是基于关键字匹配的方式,即在不同字段间查找符合输入关键字匹配要求的地理对象,无法支持复杂语义的查询。尽管D.Mark与M.Egenhofer[5]、杜冲[6]、徐爱萍[6]等对地理对象及其空间关系的语义特征进行了相关研究,然而仍停留在理论探索阶段,而针对基于WebGIS地图搜索具体实现方法和手段的研究却缺乏,难以支撑日益迫切的地图搜索需求。
本文针对地图搜索的需求,在分析传统地图搜索存在问题与不足的基础上,基于开源框架搭建了WebGIS地图搜索系统;并引入Lucene全文搜索引擎,探讨了Lucene索引与PostGIS空间数据库的映射机制,增强了地图搜索引擎构建复杂、灵活查询的能力,改善了用户体验,提高了人们获取有效信息的效率。
1.当前地图搜索的瓶颈与不足
传统的地图搜索基本遵循以下步骤:首先,提供UI界面,接收用户输入搜索关键词;其次,将用户输入的关键词构造为查询字符串,如利用“like”“∗”“?”等通配符对关键词进行简单的扩展;再次,基于Ajax发起检索请求,由服务端到数据库的特定字段去查询与扩展后的关键词相匹配的对象,并返回搜索结果[1,7]。这样做有3个明显的缺陷:一是由通配符简单扩展的关键词需要遍历数据库中的每个字段,并逐一比较,整个搜索结果非常耗时,特别是对于非结构化的长文本字段,耗时更为严重;二是由于缺乏必要的分词方法,对于用户复杂的查询欠缺支持,如无法实现类似“航天桥的收费停车场”“酒店折扣”等的复杂语义查询;三是由于搜索关键词直接映射到特定的数据库字段,系统耦合紧密,系统扩展、更新等缺乏灵活性。
2.基于Lucene的全文检索
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式[8-9]。Lucene是著名的全文检索工具包,具有开源、高效、易扩展等诸多优异特性。不同于基于数据库的关键字检索方式,Lucene除了提供“通配符搜索”以外,还支持“布尔搜索”“范围搜索”“前缀搜索”“短语搜索”和“模糊搜索”等丰富的搜索方式,不但显著提高了用户的搜索体验,而且能够为用户提供个性化的搜索结果。此外,Lucene还提供多域搜索功能,克服了针对数据库单一字段搜索或构造复杂的SQL表达式的局限,显著提高了搜索效率。
图1清晰地表达了传统基于WebGIS的地图搜索与基于Lucene的地图搜索流程的不同。基于浏览器/数据库两层架构的传统地图搜索方式(如图1(a)所示),直接将用户查询的搜索请求以Ajax方式发送到服务端,并经由服务组件解析直接映射为数据库查询的SQL语句。因此,其查询可以抽象为“Select∗from theme1_layer where field1 like关键词”的模式,查询的构造和查询效率完全依赖于数据库的SQL语句支持,难以构造复杂、灵活的查询。而基于“浏览器/Lucene/数据库”的3层架构的地图搜索(如图1(b)所示),则首先通过Hibernate、iBatis等ORM中间层或直接利用JDBC的方式,将数据库中地理对象的语义文本映射为Lucene的Document,并在此基础上构造基于倒排序方法的索引[9]。随后,用户发起的查询请求经过Lucene的分词、优化,再到索引中去进行匹配,并依据匹配度排序返回相应的结果。Lucene基于倒排序的反向索引机制不但保证了优异的检索效率,同时提供了灵活多样的查询检索方法,从而可以让用户输入更加精确的语义描述文本,提供查询结果的命中率和有效性。Lucene在提供以上高效灵活的搜索功能的同时,通过设计简洁的API接口为用户屏蔽了复杂的索引构造和技术实现细节,提高了将Lucene嵌入现有地图搜索的便捷性。
3.PostGIS与地图搜索
PostGIS是知名的开源“对象—关系”数据库PostgreSQL的空间扩展,它采用面向对象的方式扩展存储空间数据,全面支持OGC的Geometry空间数据模型。同时,除了对SQL89和SQL92的支持外,PostGIS还提供丰富的空间数据操作函数,以支持对空间数据的维护、检索及空间运算。由于Post-GIS性能优异,在其基础上衍生出了更多的扩展,如基于Dijkstra算法实现的pgrouting扩展模块[10]、用于实现基于SQL的最短路径查找功能。PostGIS支持WKT、GML、KML、GeoJSON等多种空间数据格式的存储与输出,为构建WebGIS提供了很好的支持。由于对GML和GeoJSON的完美支持,利用WFS向PostGIS存取空间数据变得异常方便。对于地理对象,可以将其属性字段(描述了相应的语义信息)和几何信息存储在同一条记录内,这种“属性—几何”的一体化存储方式,为基于文本的全文检索提供了遍历;通过倒排序索引检索到语义文本对应的记录后,可以直接提取相应的几何信息,并显示在地图上。
图1 搜索流程对比
1.模型架构
基于Lucene的3层架构的WebGIS地图搜索在传统WebGIS的架构基础上,增加了Lucene全文搜索引擎作为中间层,从而形成了客户端(至少包括搜索结果列表和地图两部分)、Lucene(负责索引的构造与查询的解析)、服务端(Tomcat支持下的一系列Servlet和JavaBean负责的WMS、WFS等地图服务,以及PostGIS空间数据库支持的空间数据管理) 3层架构体系,如图2所示。首先,将PostGIS中存储的地理对象的属性字段映射为Lucene中Field的一条记录的所有字段,共同构成一个Document;然后,利用Lucene自带的索引创建功能,构造基于<关键字,文档>的倒排序结构的索引,客户端发起检索时,先由Lucene.Analyzer进行分词和分析优化,再用Query发起对Index索引的检索和匹配;最后按照匹配度反馈检索结果到用户前端。用户点击相应的链接,发起WFS请求,从PostGIS中获取GML和地理对象的详细信息。可见,基于Lucene的3层架构将用户查询的分词、全文检索都交由Lucene中间层来完成,既提高了查询的灵活性,更将查询和数据库的二元模式进行了解耦,实现了系统的松耦合,易于维护和扩展。
图2 基于Lucene和PostIGIS的地图搜索系统架构
2.关键问题
Lucene是优秀的全文检索引擎工具包,基于Lucene的文本搜索可以完成地图搜索的绝大部分功能。然而其中有两个关键问题是基于PostGIS的地图搜索所需要特别关注的:一是空间数据库向Lucene索引的映射;二是查询结果的表达,特别是矢量要素的获取与表达。
Hibernate与iBatis都是优秀的持久层框架,是实现数据库向Lucene映射的重要手段。PostGIS提供了众多实用的空间数据操作函数,因此充分利用PostGIS的空间操作函数对于WebGIS搜索引擎至关重要。由于Hibernate、Apache OJB等ORM框架对数据库结构的封装过于完备,因此虽然大大降低了常规数据库开发的工作量,却也损失了灵活性[11]。iBatis是“半自动”的持久层框架,其重要的特点就是能够手动编辑SQL语句,这为充分利用PostGIS自定义的空间数据操作函数提供了可能,成为基于PostGIS的WebGIS持久层的可靠选择。以下语句说明了SQL语句的自定义的方法:
Lucene实现了按词频和关键词在文本中出现的位次对查询与文本进行匹配和排序的机制,为用户提供在语义上最接近用户意愿的查询结果。用户根据输出的结果,点击相应的链接即可定位到对应的地理对象。在给出文本结果列表的同时,也可以给出基于SVG的地理对象的矢量表达(类似Google Maps上的POI点的展示)。而当地理对象比较复杂、矢量数据量较大时,一次性全部记载会增加网络传输压力和浏览器的渲染压力,严重影响用户体验,因此需要研究优化机制。本文提出了基于视图范围的动态矢量加载机制,即根据当前视图范围外包矩形与所有检索结果集进行拓扑“交”运算,获取当前视图范围内的要素,以WFS的方式传输到前端,并以SVG的方式进行矢量渲染(如图3所示)。这种动态加载机制保证了在当前视图内只需要渲染有限少量的矢量要素,提高了要素传输和渲染效率。当用户点击文本链接时,用与该链接绑定的要素FID,构造WFS请求,单独获取该要素的GML数据定位到其Feature.Extent,加载显示。
图3 基于WFS的矢量要素动态加载
本研究确立了通过引入Lucene全文搜索中间件,扩展基于PostGIS的地图搜索功能的目标。首先,利用Tomcat和Geoserver搭建服务端,将基于iBatis的PostGIS作为持久化存储层;再通过JavaBean连接服务端与Lucene的分词、优化和索引服务;最后在前端基于JavaScript和Ajax机制实现地图的全文搜索和图形的浏览、定位与查询。试验以北京市某WebGIS管理系统为例,通过引入Lucene支持的全文检索机制,有效提高了查询的灵活性,可以构造类似“饭店收费停车”这种跨字段的查询请求(如图4所示)。通过Lucene可以有效解决关键词次序不确定性和跨字段查询(通过Lucene的多域查询机制)的问题。系统以酒店、停车场、道路等多个图层数据为检索对象,在实现文本检索的同时,优化了对大数据量的矢量显示和动态加载,有效改善了用户体验。
本文分析了基于客户端/数据库二元结构的WebGIS地图搜索的不足与原因,引入Lucene全文搜索引擎,通过构造PostGIS数据库到Lucene索引的有效映射机制,实现了地图信息的全文搜索。该方法能够支持灵活、复杂的查询语句构造,便于用户快速检索到更加符合自身需求的地理空间信息;同时,通过设计矢量要素的动态加载机制,有效改进了检索要素的加载和渲染效率,改善了用户体验。随着移动互联网和LBS的发展,对地理信息搜索的要求会进一步提高,引入全文检索机制后能够促进WebGIS和地理信息技术的发展;特别是由于长文本字段的检索,基于Lucene全文检索机制的检索效率提高尤为突出。同时,对于类似Google Earth上用户自身添加和标注的半结构化、非结果化信息的检索,以及地理事件监控、基于Web的空间信息挖掘等,本文提出的方法和实践可以作为此类研究与应用的重要基础。
图4 基于Lucene的全文检索WebGIS前端界面
本文的研究实现了地图搜索功能的增强,但仅仅通过对空间数据库中的地理对象属性字段建立基于倒排序的全文索引,并未真正引入语义解析模块。如搜索“车库”与“停车场”,搜索引擎并不能理解二者在语义上的相似性[12],仅能从文本匹配的角度去匹配搜索。下一步的研究需要引入语义解析模块[12],进一步提高搜索结果的查全率。此外,基于自然语言的空间关系推理越来越受到重视,类似“校园东边的篮球场”等描述空间关系的语义搜索,也需要进一步深入探讨。这样才能真正回答T.S.Eliot的追问“知识中我们丢失的智慧该到哪里去找”,从而不断提高地图搜索的智能化水平。
[1] 白玉琪,杨崇俊,刘冬林,等.基于OpenGIS WMS的空间信息搜索引擎系统原型[J].中国图象图形学报,2004,9(1):105-111.
[2] 艾菊梅,周书民,彭健.基于MMS和WebGIS的移动搜索[J].计算机工程,2008,34(22):256-257.
[3] 李云锦,钟耳顺,王尔琪,等.马尔可夫模型在空间数据预取中的应用[J].测绘通报,2010(7):1-4.
[4] 虞昌彬,胡乔,任福,等.利用B/S架构的POI信息组织方法及可视化策略研究[J].武汉大学学报:信息科学版,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] 杜冲,司望利,许珺.基于地理语义的空间关系查询和推理[J].地球信息科学,2010,12(1):48-55.
[7] 周文生.基于SVG的WebGIS研究[J].中国图象图形学报,2002,7(7):693-698.
[8] 李永春,丁华福.Lucene的全文检索的研究与应用[J].计算机技术与发展,2010,20(2):12-15.
[9] 郑榕增,林世平.基于Lucene的中文倒排索引技术的研究[J].计算机技术与发展,2010,20(3):80-83.
[10] 张玢.基于PostGIS的海岸保护与利用规划空间数据库设计与实现[D].沈阳:辽宁师范大学,2009.
[11] 阳奇,林镇灿,黄帆,等.基于Hibernate搜索的数据库全文检索系统[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
国家自然科学基金(41201398);教育部人文社科课题(12YJCZH073);湖南省“传统聚落数字化保护技术”工程实验室开放基金(CT14K09)
梁 明(1984—),男,安徽六安人,博士生,研究方向为空间数据库与数据挖掘、3DGIS。
罗 荣
梁明,罗荣,胡最.基于Lucene和PostGIS的地图搜索研究[J].测绘通报,2014(11):42-45.
10.13474/j.cnki.11-2246.2014.0359