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