魏俊鋒
(廣東電網有限責任公司中山供電局,中山 528400)
基于Lucene的生產管理系統(tǒng)一站式檢索中心的研究與設計
魏俊鋒
(廣東電網有限責任公司中山供電局,中山 528400)
隨著生產管理系統(tǒng)的發(fā)展和深入應用,系統(tǒng)的基礎數(shù)據和業(yè)務數(shù)據隨之迅猛增長,如何快速地檢索到用戶想要的數(shù)據,以及便捷地關聯(lián)檢索到相關的信息,提高用戶體驗,成為系統(tǒng)發(fā)展的當務之急。Lucene[1]是全文索引和搜尋的開源程式庫,提供一個簡單卻強大的應用程序接口,能夠做全文索引和搜尋。結合電力生產管理的業(yè)務特性,將Lucene技術應用于生產管理系統(tǒng),搭建一站式的檢索中心,為生產管理系統(tǒng)用戶提供關聯(lián)多項業(yè)務如臺賬管理、試驗管理、巡檢修管理等的多視角多層級的快速檢索。
檢索中心;一站式;生產管理系統(tǒng);Lucene
隨著南方電網公司在2014年完成一體化生產管理系統(tǒng)的開發(fā)建設,2015年全面部署上線運行[2],標志著廣東電網各直屬供電局分開部署、獨立運行時代的結束,使得各局在業(yè)務流程、數(shù)據規(guī)范、操作標準上得以統(tǒng)一。電力企業(yè)業(yè)務數(shù)據主要來自生產數(shù)據和運營數(shù)據,隨著應用的廣泛和深入,系統(tǒng)的基礎數(shù)據和業(yè)務數(shù)據增長迅猛[3]。以廣東電網為例,截止到2016年8月,設備主數(shù)據數(shù)量將近3900萬,功能位置主數(shù)據數(shù)量更是超過1.1億。而一些關鍵應用模塊(如運行日志)每月增長的數(shù)據量達到10萬以上,系統(tǒng)部署上線以來的短短一年多,這些模塊的數(shù)據量已達到百萬級別。
一方面是系統(tǒng)數(shù)據量的急劇增長,另一方面是系統(tǒng)用戶對于快速定位到自己想要的所有有關數(shù)據有著強烈的渴求。例如,能否提供諸如關鍵字查找、模糊查找等與互聯(lián)網搜索類似的快速檢索方法,定位到具體設備?又能否方便地進一步關聯(lián)到設備的巡檢記錄、消缺計劃、缺陷處理情況、操作票和工作票的開票情況?要滿足這些查詢要求,傳統(tǒng)的做法是,先到系統(tǒng)中計劃模塊查詢此設備的巡檢計劃,然后到查詢此計劃關聯(lián)的缺陷,再到操作票、工作票模塊查詢相關的記錄。這種做法能夠滿足要求,但卻有很多不足之處:一是需要來回切換菜單,用戶點擊量次數(shù)多,用戶體驗較差;二是每個模塊條件都不一樣,需要重復選擇或輸入;三是在海量數(shù)據下,查詢的性能無法保證。
經過用戶需求和檢索技術的分析,研究和建設基于檢索軟件Lucene的生產管理系統(tǒng)一站式檢索中心,能夠比較全面的解決以上問題:首先,Lucene成熟的開源檢索組件,為系統(tǒng)快速檢索性能提供了保證;其次,以Lucene檢索API為基礎,以一體化生產系統(tǒng)的業(yè)務模塊的數(shù)據速查為訴求,搭建一套開放給業(yè)務應用使用的、可以迅速構建索引并依據索引進行檢索的API接口,使各個業(yè)務模塊能夠快速簡易的接入到檢索中心,形成“一站式”的檢索模式,極大方便了用戶多維度多層級速查相關聯(lián)數(shù)據的需求,符合系統(tǒng)未來的發(fā)展需求;第三,通過檢索組件把各個不同模塊的業(yè)務數(shù)據集中在檢索中心查詢,無需用戶在不同頁面間跳轉,也不需要來回選擇復雜的查詢條件,可便捷、直觀地對相關數(shù)據進行查找、定位、分析,極大提升用戶體驗?!耙徽臼健蹦J讲坏蓪⑾到y(tǒng)當前模塊有機地結合到一起,也可以隨時對后續(xù)新增加的系統(tǒng)模塊進行可插拔式的配置管理。
1.1 系統(tǒng)業(yè)務定位
一站式檢索中心的業(yè)務定位,一是能方便的將業(yè)務數(shù)據接入到檢索中心,實現(xiàn)可插拔式的一站式管理。二是能夠方便的檢索數(shù)據。系統(tǒng)業(yè)務定位如圖1所示。
圖1 檢索中心業(yè)務定位
1.2 系統(tǒng)功能設計
根據系統(tǒng)業(yè)務定位,生產管理系統(tǒng)一站式檢索中心主要的業(yè)務需求是:能快速地將想要的業(yè)務模塊數(shù)據構建索引并使用檢索服務,能夠將不同模塊的業(yè)務數(shù)據集中在檢索中心,通過“一站式”檢索顯示。系統(tǒng)通過數(shù)據采集管理、自定義配置管理、檢索中心這三部分來組織功能。系統(tǒng)功能架構如圖2。
圖2 檢索中心功能架構
(1)數(shù)據采集管理
數(shù)據采集管理提供全方位的數(shù)據服務支撐功能,數(shù)據來源管理對數(shù)據來源進行適配和管理,需要進行索引存儲的數(shù)據可來源于視圖、表、ETL、網絡、文件服務器等。數(shù)據轉換功能將來源數(shù)據轉換為標準的可索引的數(shù)據。索引服務提供索引構建和數(shù)據檢索服務。整個數(shù)據采集管理基于Lucene API,為自定義配置管理和檢索中心提供后臺支撐,是一站式檢索中心系統(tǒng)的核心。
(2)自定義配置管理
業(yè)務應用(數(shù)據)首先要接入到一站式檢索中心系統(tǒng)進行索引構建,才可以對其進行檢索。配置管理提供接入所需要的操作入口。通常,一個配置需要的條件包括模塊、數(shù)據來源(目前支持視圖)和存儲路徑。除基本的增刪改查功能外,還包括對索引字段的管理,如選擇哪些字段進行索引,是否需要分詞等。
通過自定義配置,可以很便捷、高效地將不同模塊的業(yè)務數(shù)據接入到檢索中心,進行一站式的檢索。
(3)檢索中心
檢索中心主要供檢索功能。用戶輸入關鍵字,系統(tǒng)將關鍵字進行分詞、檢索,把命中的數(shù)據記錄進行展示,并高亮顯示關鍵字。
所有集成的業(yè)務數(shù)據均可以在此顯示,既支持對全部已構建數(shù)據進行檢索,又支持對單類業(yè)務數(shù)據進行索引。
1.3 系統(tǒng)架構設計
根據系統(tǒng)功能設計,生產管理系統(tǒng)一站式檢索中心分為兩大塊:全文檢索應用端和全文檢索服務端。應用端和服務端通過JMS消息組件進行消息傳遞。檢索中心系統(tǒng)架構如圖3所示。
圖3 檢索中心系統(tǒng)架構
(1)應用端
由全文檢索配置管理和檢索中心兩個應用組成。對某類業(yè)務數(shù)據構建全文索引的功能,首先需要通過全文檢索配置管理應用將需要進行全文檢索的數(shù)據通過數(shù)據庫視圖進行數(shù)據采集,針對采集的數(shù)據進行創(chuàng)建索引,建立分詞、分類,自動生成索引文件提供給檢索中心。這部分的功能對用戶來講是可視的。
(2)全文檢索服務器
全文檢索服務器包括檢索API、檢索客戶端、檢索引擎以及Lucene核心組件,主要處理應用端發(fā)送的接入和檢索請求。檢索API規(guī)范了需要接入檢索中心即檢索的所有標準。檢索客戶端是對檢索API調用的一些簡單實現(xiàn),提供給應用端使用。檢索引擎封裝了Lucene核心功能:構建索引和數(shù)據檢索。通常一個檢索過程是這樣的:應用端按照檢索API規(guī)范(可直接使用檢索客戶端實現(xiàn))發(fā)起調用請求,全文檢索服務器接收到請求后,通過檢索引擎處理請求并反饋處理結果。
1.4 系統(tǒng)技術架構
基于Lucene的API,構建支持索引(Index)、檢索(Search)、接入配置(Config)的一站式檢索服務器,充分利用Java多線程、Spring MVC[4]、Volecity、Require JS、JMS等前后端技術,為安全生產子系統(tǒng)提供強大便捷的檢索支撐。系統(tǒng)的總體技術架構如圖表4。
圖4 總體技術架構
2.1 Lucene檢索技術
Lucene是一個高性能、可伸縮的信息搜索(IR)庫[5]。它可以融入到我們自己的應用程序中,作為一種索引支撐技術,為應用程序添加索引和搜索能力。Lucene是用Java實現(xiàn)的、成熟的開源項目,也是Apache軟件基金(Apache Software Foundation)中的一個項目,并且基于Apache軟件許可協(xié)議授權。
Lucene提供了一套簡單而強大的核心API,我們不需要全面掌握和理解全文索引和搜索機制,只需要掌握幾個核心類便可以輕松使用了。Lucene是一個Java類庫,對于不同的索引和搜索內容是通用的,所以它也可以很容易的集成到我們的應用程序中。Lucene最核心的功能便是索引構建和數(shù)據檢索,它們是通過IndexWriter和IndexSearcher實現(xiàn)的。Lucene的索引構建與檢索過程如圖5所示。
圖5 Lucene索引構建與檢索
2.2 索引構建與數(shù)據檢索實現(xiàn)
(1)索引構建
Lucene構建索引的條件是,要有一個目錄(Directory),一個帶有分詞器(Analyzer)的索引構建配置對象(IndexWriterConfig),一個帶有字段(Field)的文檔對象(Document),最后使用索引創(chuàng)建器IndexWriter進行索引構建。通常,使用Lucene構建索引的簡要步驟如圖6所示。
從索引構建步驟可以看出,創(chuàng)建索引的關鍵是把需要檢索的數(shù)據構造成Lucene相關對象。對于使用者來講,最關鍵的是構造Document和Field對象,其中Field對象關聯(lián)的最終需要進行索引的數(shù)據,也即業(yè)務數(shù)據。為了構建可插拔的業(yè)務數(shù)據對象,且不限制業(yè)務數(shù)據特定的結構(字段數(shù)量),我們將業(yè)務數(shù)據設計成一個視圖(View)。每一個特定的應用模塊數(shù)據都用一個視圖表示,視圖里的字段就是最終要構建成Lucene索引文檔(Field字段)的數(shù)據。在需要對某個業(yè)務模塊構建索引時,只要告訴服務器,是要針對哪個視圖進行構建,服務器便可以自行獲取相應的數(shù)據。這樣做的好好處是,不需要修改原有應用的任何代碼,不需要改變原有數(shù)據結構,數(shù)據字段選擇非常靈活,甚至可以在任何時候修改視圖以更新需要進行索引的數(shù)據。
圖6 索引構建步驟
我們知道,需要進行索引的數(shù)據一般都非常龐大,那么如何確保構建索引的效率呢?如果完全不加控制,一次性加載所有數(shù)據,對于內存、I/O的消耗都是非常大的,很可能造成構建過程中斷。為了解決這個問題,系統(tǒng)采用了多線程和阻塞隊列[6]的讀取方式。使用2個線程,讀線程不斷的從視圖中取數(shù)據(每次500)并放入隊列,取線程監(jiān)聽隊列并將隊列中的數(shù)據構建索引。構建索引的整個過程如圖表7所示。
圖7 索引構建示意圖
(2)數(shù)據檢索
數(shù)據檢索是與索引構建相反的過程。類似的,數(shù)據檢索需要知道存儲的目錄(Directory),一個帶有構建時所使用的分詞器(Analyzer)的查詢解析器(QueryParser),最后使用索引檢索器(IndexSearcher)和目錄讀取器(IndexReader),從文檔中讀出命中的文檔指針集(TopDocs)。使用Lucene檢索數(shù)據的簡要步驟如圖8所示。
圖8 數(shù)據檢索示意圖
用戶檢索時,可以選擇單個模塊進行檢索,也可以對全部數(shù)據進行檢索。如果是檢索全部數(shù)據,檢索中心除了需要知道檢索的總記錄數(shù)外,還需要展示每個模塊的記錄數(shù)。為了提升檢索性能,達到快速識別各模塊記錄數(shù)的目的,系統(tǒng)使用多線程并發(fā)搜索的方式進行識別。使用Java7的Fork/Join框架,將一個檢索任務切分成多個子任務執(zhí)行,最后合并檢索結果。例如,需要從10個模塊中檢索出含有關鍵字“10kV”的記錄,那么系統(tǒng)將分成10個子任務并發(fā)檢索。任務分解合并的模式如圖9所示。
圖9 檢索任務分解示意圖
電力行業(yè)是一個用戶量非常龐大的傳統(tǒng)行業(yè),生產業(yè)務每時每刻都產生著成千上萬的數(shù)據,是不折不扣的大數(shù)據行業(yè)。傳統(tǒng)的檢索數(shù)據的方法是使用SQL語句直接對數(shù)據庫中的結構化數(shù)據進行查詢,在數(shù)據量達到一定級別時,不得不對數(shù)據庫結構或業(yè)務代碼進行重構,這時一項費時、費力、費錢的工作。
基于Lucene的生產管理系統(tǒng)一站式檢索中心,有效地解決了上述問題。第一,Lucene核心API解決了檢索效率的問題,數(shù)據量越大,Lucene的優(yōu)勢越明顯。第二,檢索中心對原有系統(tǒng)是零侵入性的,這就避免了為了使用全文索引而進行的代碼改造。第三,可插拔式的“一站式”管理方式非常靈活,可以非常方便和高效地將已有模塊和后續(xù)新增模塊接入到檢索中心。第四,由于采用的是視圖方式抽取數(shù)據進行的索引構建,依據運行過程中查詢的體驗,可隨時對視圖字段進行修正,系統(tǒng)的可維護性非常高。
綜上所述,基于Lucene的生產管理系統(tǒng)一站式檢索中心具有高效、多維度、多層級、可插拔、可維護等眾多優(yōu)點,可以為處于大數(shù)據行業(yè)的公司節(jié)約時間和人力成本,用于數(shù)據量巨大的電力企業(yè)是非常切合的。
數(shù)據快速查詢一直是大數(shù)據企業(yè)對其企業(yè)軟件最渴求的功能之一,它是考量用戶體驗的最直接的標準?;贚ucene的生產管理系統(tǒng)一站式檢索中心,既可以有效應對系統(tǒng)數(shù)據快速增長和用戶查詢體驗差的矛盾,又可以靈活應對系統(tǒng)功能不斷增長變化而導致的動態(tài)構建和維護索引困難的矛盾,還可以將系統(tǒng)不同模塊的數(shù)據有機而直觀地“聯(lián)合展現(xiàn)”,讓數(shù)據展示更清晰。檢索中心不對原有系統(tǒng)進行侵入,這不僅可應用與生產管理系統(tǒng),還可以推廣到其他的子系統(tǒng)。當然,檢索中心也存在一些不足之處,例如目前數(shù)據來源只支持視圖獲取,也只能通過手動方式進行索引更新,數(shù)據的即時性不如直接查詢數(shù)據庫,這也是下一步研究的重點。
[1]Apache Software Foundation.http://lucene.apache.org/core/6_2_0/demo/overview-summary.html#IndexFiles,http://lucene.apache.org/ core/6_2_0/demo/overview-summary.html#Searching_Files.
[2]廣東電網有限責任公司.資產管理系統(tǒng)安全生產管理子系統(tǒng)運行報告[R],2015.
[3]廣東電網有限責任公司.廣東電網“十三五”技術創(chuàng)新行動計劃_信息與數(shù)據技術創(chuàng)新分冊[R],2016.
[4]陳雄華,林開雄.Spring 3.x企業(yè)應用開發(fā)實戰(zhàn)[M].電子工業(yè)出版社,2012.
[5]Michael McCandless,Erik Hatcher,Otis Gospodnetic,Lucene實戰(zhàn)(第2版)[M].牛長流,肖宇(譯).人民郵電出版社,2011.
[6]方騰飛,魏鵬,程曉明.Java并發(fā)編程的藝術[M].機械工業(yè)出版社,2015.
Research and Design of One-stop Retrieval Center for Production Management System Based on Lucene
WEI Jun-feng
(Zhongshan Power Supply Bureau of Guangdong Power Grid Co.,Ltd.,Zhongshan 528400)
With the development and the wide application of the production management system,the data of the system is increasing rapidly,how to quickly retrieve the data that users want,and to improve the user’s satisfaction,has become the urgent task of the system development. Lucene is a set of open source library for full text index and search,which provides a simple but powerful application program interface, which can be used for full-text indexing and searching.Combined with the operational characteristics of power production management, applies Lucene to the production management system,and sets up a one-stop search center,which provides an multi-angle,multi-level and effective way for the rapid retrieval service function of the production management system.
Retrieval Center;One-Stop;Production Management System;Lucene
1007-1423(2016)36-0071-06
10.3969/j.issn.1007-1423.2016.36.018
魏俊鋒(1970-),男,高級工程師,從事領域為電力信息系統(tǒng)的建設和項目管理工作
2016-10-25
2016-12-15