聞紹川
大連智慧星云科技有限公司 遼寧沈陽 110034
分布式搜索引擎ElasticSearch(簡稱ES)是一個(gè)開源的、基于Lucene 的分布式搜索引擎,可以提供穩(wěn)定、實(shí)時(shí)、可靠的檢索服務(wù),具有高可用、易擴(kuò)展、實(shí)時(shí)等特點(diǎn)。ES 使用分布式索引文件存儲(chǔ),可執(zhí)行快速分析搜索,并擴(kuò)展到上百臺(tái)服務(wù)器,能處理PB 級(jí)結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。本文在分析基于ES 的數(shù)據(jù)組織、分布式集群、分布式索引、地理形狀與地理位置聚合、實(shí)時(shí)空間查詢、統(tǒng)計(jì)分析等關(guān)鍵技術(shù)的基礎(chǔ)上,設(shè)計(jì)開發(fā)了一種面向Web 應(yīng)用的地理國情綜合分析系統(tǒng),采用1000 多萬條地表覆蓋數(shù)據(jù)進(jìn)行模擬試驗(yàn),驗(yàn)證了其分析的高效性和可用性[1]。
地理國情地表覆蓋成果數(shù)據(jù)包含林地、耕地、草地、建設(shè)用地、水域等多種地物類型,是地理國情普查成果中重要的組成部分,其數(shù)據(jù)量大,復(fù)雜度高,具有較強(qiáng)的代表性。
搭建的ES 集群包含5 臺(tái)虛擬機(jī)服務(wù)器,集群內(nèi)部選出一個(gè)主節(jié)點(diǎn),其他作為數(shù)據(jù)節(jié)點(diǎn),主節(jié)點(diǎn)同時(shí)也作為數(shù)據(jù)節(jié)點(diǎn)使用。使用Head、Kibana 等客戶端管理整個(gè)集群,并調(diào)用集群服務(wù)。集群使用了復(fù)制和分片技術(shù),索引文件分片數(shù)為5,復(fù)制數(shù)為1,分片和復(fù)制特性的同步啟用可起到高性能分布式存儲(chǔ)及容災(zāi)備份的作用。
采用CSV 文本作為空間數(shù)據(jù)交換格式。CSV 文本中每一行表示一個(gè)空間要素,用逗號(hào)分隔屬性內(nèi)容,空間對(duì)象使用WKT 方式表達(dá)。將ArcGISFileGeodatabase 空間數(shù)據(jù)轉(zhuǎn)換為WKT 字符串,最后在ArcMap 中將屬性表導(dǎo)出為文本格式。
在執(zhí)行數(shù)據(jù)分析前,首先需要將時(shí)空大數(shù)據(jù)寫入ES 集群中。本文基于ESJavaAPI 開發(fā)了專門的數(shù)據(jù)維護(hù)客戶端,客戶端逐行讀取CSV 文本,按逗號(hào)切割,并指定每個(gè)字段的存儲(chǔ)類型,完成預(yù)處理后再調(diào)用ESJavaAPI,發(fā)送至ES 集群主節(jié)點(diǎn)進(jìn)行索引構(gòu)建。由于時(shí)空大數(shù)據(jù)中存在需要模糊搜索的文本信息,因此引入了IK分詞器(IKAnalyzer)來解決中文分詞問題[2]。
時(shí)空大數(shù)據(jù)中包含的地理空間對(duì)象體積龐大,必須引入空間索引算法才能對(duì)其進(jìn)行快速空間檢索。ES 中提供了2 種索引算法,地理哈希(Geo-hashPrefixTree)和象限四叉樹(QuadPrefixTree),ES 默認(rèn)使用地理哈希算法。地理哈希是一種將經(jīng)緯度坐標(biāo)編碼成字符串的方式,把整個(gè)地球分為32 個(gè)單元的格子,每個(gè)單元的格子可以再分解成32 個(gè)單元,不斷重復(fù)。象限四叉樹算法和地理哈希算法類似,但每個(gè)層級(jí)都是4 個(gè)單元。地理哈希算法適用于沒有空間關(guān)聯(lián)關(guān)系的點(diǎn)數(shù)據(jù),象限四叉樹算法適用于鄰接邊問題比較普遍的線、面等復(fù)雜數(shù)據(jù)。
地理國情綜合統(tǒng)計(jì)分析服務(wù)是以地理國情地表覆蓋數(shù)據(jù)為基礎(chǔ)的實(shí)時(shí)地理分析服務(wù),提供對(duì)某一區(qū)域的快速查詢和統(tǒng)計(jì)分析服務(wù)。系統(tǒng)允許用戶在瀏覽器端提交行政區(qū)劃、空間范圍、時(shí)間范圍、統(tǒng)計(jì)字段等參數(shù),分析服務(wù)可快速返回查詢統(tǒng)計(jì)詳情,結(jié)果以可視化圖表的形式展示。地理國情綜合統(tǒng)計(jì)分析服務(wù)的分析功能包括全文檢索、基本統(tǒng)計(jì),空間檢索、綜合統(tǒng)計(jì)分析、格網(wǎng)分析等服務(wù)接口。
1.5.1 全文檢索
系統(tǒng)可以對(duì)特定字段執(zhí)行模糊搜索、精確匹配、多字段檢索、范圍搜索、通配符檢索等常規(guī)全文檢索操作,并支持檢索結(jié)果的過濾和排序。具體操作時(shí),使用ESAPI 的match 和query 查詢語句,返回結(jié)果為JSON 數(shù)組,數(shù)組中每個(gè)JSON 對(duì)象包含CC、CCNAME 等所有屬性及空間字段信息,用戶也可以定制請(qǐng)求返回感興趣的字段。返回內(nèi)容包含WKT 空間字段,系統(tǒng)可將詳細(xì)信息展示在Web 前端地圖上。本查詢接口還支持服務(wù)端分頁功能。
1.5.2 空間檢索
空間檢索功能可實(shí)現(xiàn)規(guī)則(或不規(guī)則)格網(wǎng)單元查詢、路網(wǎng)密度計(jì)算、高速公路出入口覆蓋居民地?cái)?shù)量分析等大型統(tǒng)計(jì)分析的實(shí)時(shí)計(jì)算和快速響應(yīng)??臻g檢索功能依賴空間索引來實(shí)現(xiàn),因此執(zhí)行檢索前必須完成所有空間幾何對(duì)象的索引構(gòu)建??臻g檢索需要在查詢語句中添加空間范圍過濾參數(shù),空間范圍過濾參數(shù)支持WKT、GeoJSON 等格式,可以是點(diǎn)、線、面任意一種類型。ES 中通常使用組合查詢語句,并將空間對(duì)象字符串放入指定的filter 參數(shù)中,返回結(jié)果與常規(guī)全文檢索功能相同[3]。
1.5.3 基本統(tǒng)計(jì)分析
基本統(tǒng)計(jì)分析即計(jì)算滿足在一定約束條件下,某類型的最大值、最小值、平均值、總和、個(gè)數(shù)。該功能使用StatsAggregation 接口,會(huì)一次返回max、min、avg、sum、count5 個(gè)指標(biāo)值。
1.5.4 綜合統(tǒng)計(jì)分析
ES 可在全文檢索或空間檢索的結(jié)果集上進(jìn)行統(tǒng)計(jì),即聚合(Aggregations)。聚合功能為ES 注入了統(tǒng)計(jì)分析的高級(jí)功能,用戶使用簡單的R EST 請(qǐng)求語句就可實(shí)現(xiàn)對(duì)大數(shù)據(jù)的統(tǒng)計(jì)指標(biāo)提取,同樣的工作,在Hadoop 中需要編寫調(diào)試大段的Map R educe 腳本,而在ES 中僅調(diào)用一個(gè)API 就能實(shí)現(xiàn)。除提供類似于SQL 語言中的groupby、avg、sum 等常用函數(shù)外,AggregationsAPI 還支持更復(fù)雜的統(tǒng)計(jì)分析接口,例如平方和、方差、標(biāo)準(zhǔn)差、百分位數(shù)統(tǒng)計(jì),其特有的桶聚合(bucketAggregations)可按一定規(guī)則進(jìn)行分組統(tǒng)計(jì),分組方式包括詞項(xiàng)(Terms)方式、過濾器(Filters)方式、數(shù)值范圍方式(R anges)、時(shí)間段(Dates)方式。例如,可針對(duì)地理國情數(shù)據(jù)CCNAME 類別進(jìn)行分組統(tǒng)計(jì),計(jì)算每個(gè)類別所占總面積的百分比。
傳統(tǒng)的地理國情數(shù)據(jù)統(tǒng)計(jì)分析采用專門的GIS 統(tǒng)計(jì)軟件,計(jì)算量大、耗時(shí)久,不具備實(shí)時(shí)響應(yīng)的能力。