闻绍川
大连智慧星云科技有限公司 辽宁沈阳 110034
分布式搜索引擎ElasticSearch(简称ES)是一个开源的、基于Lucene 的分布式搜索引擎,可以提供稳定、实时、可靠的检索服务,具有高可用、易扩展、实时等特点。ES 使用分布式索引文件存储,可执行快速分析搜索,并扩展到上百台服务器,能处理PB 级结构化或非结构化数据。本文在分析基于ES 的数据组织、分布式集群、分布式索引、地理形状与地理位置聚合、实时空间查询、统计分析等关键技术的基础上,设计开发了一种面向Web 应用的地理国情综合分析系统,采用1000 多万条地表覆盖数据进行模拟试验,验证了其分析的高效性和可用性[1]。
地理国情地表覆盖成果数据包含林地、耕地、草地、建设用地、水域等多种地物类型,是地理国情普查成果中重要的组成部分,其数据量大,复杂度高,具有较强的代表性。
搭建的ES 集群包含5 台虚拟机服务器,集群内部选出一个主节点,其他作为数据节点,主节点同时也作为数据节点使用。使用Head、Kibana 等客户端管理整个集群,并调用集群服务。集群使用了复制和分片技术,索引文件分片数为5,复制数为1,分片和复制特性的同步启用可起到高性能分布式存储及容灾备份的作用。
采用CSV 文本作为空间数据交换格式。CSV 文本中每一行表示一个空间要素,用逗号分隔属性内容,空间对象使用WKT 方式表达。将ArcGISFileGeodatabase 空间数据转换为WKT 字符串,最后在ArcMap 中将属性表导出为文本格式。
在执行数据分析前,首先需要将时空大数据写入ES 集群中。本文基于ESJavaAPI 开发了专门的数据维护客户端,客户端逐行读取CSV 文本,按逗号切割,并指定每个字段的存储类型,完成预处理后再调用ESJavaAPI,发送至ES 集群主节点进行索引构建。由于时空大数据中存在需要模糊搜索的文本信息,因此引入了IK分词器(IKAnalyzer)来解决中文分词问题[2]。
时空大数据中包含的地理空间对象体积庞大,必须引入空间索引算法才能对其进行快速空间检索。ES 中提供了2 种索引算法,地理哈希(Geo-hashPrefixTree)和象限四叉树(QuadPrefixTree),ES 默认使用地理哈希算法。地理哈希是一种将经纬度坐标编码成字符串的方式,把整个地球分为32 个单元的格子,每个单元的格子可以再分解成32 个单元,不断重复。象限四叉树算法和地理哈希算法类似,但每个层级都是4 个单元。地理哈希算法适用于没有空间关联关系的点数据,象限四叉树算法适用于邻接边问题比较普遍的线、面等复杂数据。
地理国情综合统计分析服务是以地理国情地表覆盖数据为基础的实时地理分析服务,提供对某一区域的快速查询和统计分析服务。系统允许用户在浏览器端提交行政区划、空间范围、时间范围、统计字段等参数,分析服务可快速返回查询统计详情,结果以可视化图表的形式展示。地理国情综合统计分析服务的分析功能包括全文检索、基本统计,空间检索、综合统计分析、格网分析等服务接口。
1.5.1 全文检索
系统可以对特定字段执行模糊搜索、精确匹配、多字段检索、范围搜索、通配符检索等常规全文检索操作,并支持检索结果的过滤和排序。具体操作时,使用ESAPI 的match 和query 查询语句,返回结果为JSON 数组,数组中每个JSON 对象包含CC、CCNAME 等所有属性及空间字段信息,用户也可以定制请求返回感兴趣的字段。返回内容包含WKT 空间字段,系统可将详细信息展示在Web 前端地图上。本查询接口还支持服务端分页功能。
1.5.2 空间检索
空间检索功能可实现规则(或不规则)格网单元查询、路网密度计算、高速公路出入口覆盖居民地数量分析等大型统计分析的实时计算和快速响应。空间检索功能依赖空间索引来实现,因此执行检索前必须完成所有空间几何对象的索引构建。空间检索需要在查询语句中添加空间范围过滤参数,空间范围过滤参数支持WKT、GeoJSON 等格式,可以是点、线、面任意一种类型。ES 中通常使用组合查询语句,并将空间对象字符串放入指定的filter 参数中,返回结果与常规全文检索功能相同[3]。
1.5.3 基本统计分析
基本统计分析即计算满足在一定约束条件下,某类型的最大值、最小值、平均值、总和、个数。该功能使用StatsAggregation 接口,会一次返回max、min、avg、sum、count5 个指标值。
1.5.4 综合统计分析
ES 可在全文检索或空间检索的结果集上进行统计,即聚合(Aggregations)。聚合功能为ES 注入了统计分析的高级功能,用户使用简单的R EST 请求语句就可实现对大数据的统计指标提取,同样的工作,在Hadoop 中需要编写调试大段的Map R educe 脚本,而在ES 中仅调用一个API 就能实现。除提供类似于SQL 语言中的groupby、avg、sum 等常用函数外,AggregationsAPI 还支持更复杂的统计分析接口,例如平方和、方差、标准差、百分位数统计,其特有的桶聚合(bucketAggregations)可按一定规则进行分组统计,分组方式包括词项(Terms)方式、过滤器(Filters)方式、数值范围方式(R anges)、时间段(Dates)方式。例如,可针对地理国情数据CCNAME 类别进行分组统计,计算每个类别所占总面积的百分比。
传统的地理国情数据统计分析采用专门的GIS 统计软件,计算量大、耗时久,不具备实时响应的能力。