沃葉紅 蘇州市吳江區(qū)廣播電視臺(tái)
隨著社會(huì)的不斷發(fā)展,如何發(fā)揮出一個(gè)組織內(nèi)員工的經(jīng)驗(yàn)、知識(shí)和能力已經(jīng)變得越來(lái)越重要,知識(shí)管理已經(jīng)成為決定一個(gè)組織競(jìng)爭(zhēng)力的關(guān)鍵因素。結(jié)合電視臺(tái)融媒體發(fā)展的大趨勢(shì),對(duì)于多面手人才的需求與日俱增,如何把員工的工作經(jīng)驗(yàn)、專(zhuān)業(yè)技術(shù)等知識(shí)匯集起來(lái),創(chuàng)造良好的知識(shí)共享氛圍,并且與電視臺(tái)的戰(zhàn)略發(fā)展有機(jī)統(tǒng)一起來(lái),創(chuàng)造整體大于局部相加的效果,一直以來(lái)都是知識(shí)管理的難題。本文基于電視臺(tái)實(shí)際工作中知識(shí)管理的需要,結(jié)合知識(shí)管理的理論[1],設(shè)計(jì)了一套基于Java的知識(shí)管理系統(tǒng),目標(biāo)是能夠提高知識(shí)管理水平,提升團(tuán)隊(duì)效率和綜合競(jìng)爭(zhēng)力。
對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō),開(kāi)發(fā)框架的選取舉足輕重,本文系統(tǒng)采用成熟的Spring+Springmvc+Hibernate整合開(kāi)發(fā)框架,具有開(kāi)發(fā)速度快,業(yè)務(wù)邏輯清晰,可移植性和可拓展性強(qiáng)的優(yōu)點(diǎn),而且基于MVC設(shè)計(jì)模式使得系統(tǒng)的前臺(tái)展示和后端服務(wù)是高度解耦的,保障了數(shù)據(jù)的安全。系統(tǒng)的架構(gòu)圖如圖1所示。
系統(tǒng)開(kāi)發(fā)工具采用時(shí)下比較流行的IntelliJ IDEA,數(shù)據(jù)庫(kù)采用的是MySQL5.7,Tomcat7.0作為WEB服務(wù)器容器,版本控制采用了Git,并且使用微軟提供的 Visual Studio Team Services[2]免費(fèi)私有倉(cāng)庫(kù)將項(xiàng)目源碼進(jìn)行云端的備份。
圖1 系統(tǒng)架構(gòu)圖
由于實(shí)際工作的需要,我們的系統(tǒng)也需要支持在移動(dòng)端的訪問(wèn),那么手機(jī)APP的開(kāi)發(fā)勢(shì)必成為首選。目前手機(jī)APP的開(kāi)發(fā)技術(shù)主要有原生開(kāi)發(fā)和混合開(kāi)發(fā)技術(shù)等。原生開(kāi)發(fā)具有最快的運(yùn)行速度和最好的用戶(hù)體驗(yàn),但是原生開(kāi)發(fā)上手學(xué)習(xí)的難度較大,而且需要為蘋(píng)果和安卓開(kāi)發(fā)兩套不同的代碼,造成開(kāi)發(fā)維護(hù)成本極高。而混合開(kāi)發(fā)通常是將蘋(píng)果和安卓的底層API封裝JS庫(kù),這樣就可以編寫(xiě)一套代碼,在打包的時(shí)候分別打包成IOS和Android的APP,而且目前混合開(kāi)發(fā)技術(shù)成熟,具備媲美原生的速度和體驗(yàn)。因此從開(kāi)發(fā)維護(hù)成本和開(kāi)發(fā)難度上考慮,我們選擇了基于HTML5+的混合開(kāi)發(fā)技術(shù)。
本文系統(tǒng)的移動(dòng)端采用了HBulider作為開(kāi)發(fā)平臺(tái),這款工具支持HTML5和WEB的開(kāi)發(fā),可以支持邊開(kāi)發(fā)邊測(cè)試,目前已經(jīng)被廣泛應(yīng)用到WEB開(kāi)發(fā)中[3]。
Lucene是apache基金會(huì)的一個(gè)開(kāi)源項(xiàng)目[4],它是一個(gè)全文檢索引擎包,提供了查詢(xún)、索引和文本分析引擎,經(jīng)過(guò)多年的發(fā)展,已經(jīng)十分成熟穩(wěn)定,近年來(lái)頗受開(kāi)發(fā)者的青睞。本文系統(tǒng)在處理大量存儲(chǔ)信息的檢索時(shí),在系統(tǒng)內(nèi)集成了基于Lucene的搜索功能。
如圖2所示,本文所設(shè)計(jì)的知識(shí)管理系統(tǒng)主要分為三大模塊:核心功能知識(shí)庫(kù)功能、輔助功能基礎(chǔ)數(shù)據(jù)管理功能和日志管理功能。圖2中的知識(shí)全文檢索等功能前的手機(jī)圖標(biāo)表示此項(xiàng)功能提供了移動(dòng)端(手機(jī)、PAD)訪問(wèn)的功能,可以支持工作人員遠(yuǎn)程使用此項(xiàng)服務(wù)。
知識(shí)庫(kù)是知識(shí)管理的核心功能,而知識(shí)管理的基礎(chǔ)就是對(duì)于數(shù)據(jù)的管理。在數(shù)據(jù)管理模塊中,我們將知識(shí)按照兩個(gè)維度進(jìn)行分類(lèi),一個(gè)是工作的類(lèi)型,分為:軟件、硬件等幾類(lèi),另一個(gè)是工作的內(nèi)容,例如負(fù)責(zé)的節(jié)目、工作內(nèi)容等。工作的內(nèi)容和相關(guān)的負(fù)責(zé)人進(jìn)行關(guān)聯(lián),這樣知識(shí)就可以和人聯(lián)系在一起了。
圖2 系統(tǒng)功能模塊圖
知識(shí)的錄入和維護(hù)是知識(shí)庫(kù)中最基礎(chǔ)的功能,本系統(tǒng)支持瀏覽器、移動(dòng)端錄入知識(shí),知識(shí)可以是對(duì)某項(xiàng)工作的心得、體會(huì),也可以是操作說(shuō)明、操作手冊(cè),更可以是對(duì)于某種問(wèn)題的解決方案,知識(shí)錄入之后支持本人的繼續(xù)修改。此外,用戶(hù)還可以在系統(tǒng)中查詢(xún)到某類(lèi)知識(shí)的負(fù)責(zé)人,這樣可以在知識(shí)庫(kù)中查詢(xún)不到所要信息的情況下,也能迅速找到此類(lèi)問(wèn)題的專(zhuān)家進(jìn)行進(jìn)一步交流。
現(xiàn)代搜索引擎的功能就是用戶(hù)輸入想要搜索的數(shù)據(jù),搜索引擎返回準(zhǔn)確的,或者說(shuō)用戶(hù)想要的搜索結(jié)果,這個(gè)功能從本質(zhì)上是依賴(lài)于一種稱(chēng)為索引的結(jié)構(gòu)。索引是一種類(lèi)似于書(shū)的目錄一樣的物理結(jié)果,可以提供應(yīng)用程序進(jìn)行信息的檢索,對(duì)于Lucene工具包來(lái)說(shuō),提供的最重要的功能就是索引的建立和提供基于索引的搜索功能了。
本文系統(tǒng)建立索引的過(guò)程是將每個(gè)知識(shí)轉(zhuǎn)化為一個(gè)Knowledge對(duì)象,具有建立時(shí)間、標(biāo)題、內(nèi)容、附件、狀態(tài)等信息,然后把它轉(zhuǎn)化為L(zhǎng)ucene的Document對(duì)象,并且進(jìn)行提交,建立索引文件;搜索的過(guò)程則是對(duì)用戶(hù)的輸入進(jìn)行分詞,本文系統(tǒng)采用了高性能的中文分詞器IKSegmenter,可以把中文的輸入結(jié)果進(jìn)行拆分,拆分后再利用Lucene提供的接口進(jìn)行索引的查找,最后根據(jù)命中結(jié)果返回搜索的結(jié)果,
搜索引擎截圖如圖3所示。
搜索引擎部分關(guān)鍵代碼:
I K S e g m e n t e r i k = n e w I K S e g m e n t e r(n e w StringReader(key), true);
Lexeme lex=null;
StringBuffer keys=new StringBuffer();
//對(duì)分好詞的key的每一個(gè)關(guān)鍵字查找映射關(guān)系,有映射則將映射對(duì)象加入keys
且把key全放入keys中,將keys當(dāng)成新的key,之后進(jìn)行查詢(xún)
key=keys.toString();
// 取得查詢(xún)對(duì)象
I n d e x R e a d e r[] r e a d e r s = s e a r c h O b j e c t.getSearcherReads("search");
MultiReader mReaders = new MultiReader(readers);
I n d e x S e a r c h e r i n d e x S e a r c h = n e w IndexSearcher(mReaders);
Analyzer analyzer = new IKAnalyzer(true);
// 取得查詢(xún)結(jié)果
TopDocs topDocs = topCollector.topDocs();
resultCount = topDocs.totalHits < resultCount ?
topDocs.totalHits :
resultCount;
for (int i = 0; i < resultCount; i++) {
Document doc = indexSearch.doc(topDocs.scoreDocs[i].doc);
圖3 搜索引擎截圖
if (user == null) {
if (doc.get("isbelongkjb").equals("0")) {
if (problemType == null || problemType.equals("")) {
// 轉(zhuǎn)換Document對(duì)象為內(nèi)容對(duì)象
SearchResult search = PackProblem.convertDocToContent(doc, query1, analyzer);
// 加入到結(jié)果列表 返回給前臺(tái)頁(yè)面獲取
searchResult.add(search);
} else {
if (doc.get("problemtype").equals(problemType)) {
// 轉(zhuǎn)換Document對(duì)象為內(nèi)容對(duì)象
S e a r c h R e s u l t s e a r c h = P a c k P r o b l e m.convertDocToContent(doc, query1, analyzer);
// 加入到結(jié)果列表 返回給前臺(tái)頁(yè)面獲取
searchResult.add(search);
}
}
}} else {
if (doc.get("isbelongkjb").equals("1") && count ==
0) {
continue;
}
if (problemType == null || problemType.equals(""))
{
// 轉(zhuǎn)換Document對(duì)象為內(nèi)容對(duì)象
SearchResult search = PackProblem.convertDocToContent(doc, query1, analyzer);
// 加入到結(jié)果列表 返回給前臺(tái)頁(yè)面獲取
searchResult.add(search);
} else {
if (doc.get("problemtype").equals(problemType))
{
// 轉(zhuǎn)換Document對(duì)象為內(nèi)容對(duì)象
SearchResult search = PackProblem.convertDocToContent(doc, query1, analyzer);
// 加入到結(jié)果列表 返回給前臺(tái)頁(yè)面獲取
searchResult.add(search);
}
}
}
}
本文系統(tǒng)的基礎(chǔ)管理功能具備了對(duì)用戶(hù)、用戶(hù)角色、角色權(quán)限、用戶(hù)數(shù)據(jù)權(quán)限和部門(mén)管理的功能,系統(tǒng)不僅做到了對(duì)用戶(hù)分配角色,對(duì)角色分配不同的權(quán)限(具體到頁(yè)面上的一個(gè)按鈕),還做到了對(duì)用戶(hù)可以查詢(xún)的數(shù)據(jù)范圍進(jìn)行控制(對(duì)用戶(hù)來(lái)說(shuō)是無(wú)感的),另外還可以對(duì)部門(mén)進(jìn)行增刪改查。
操作日志記錄是一種非常實(shí)用的功能,一般來(lái)說(shuō)可以利用spring的aop或者攔截器來(lái)實(shí)現(xiàn),本文系統(tǒng)選擇了aop技術(shù)實(shí)現(xiàn),自定義了一個(gè)用戶(hù)操作注解和一個(gè)專(zhuān)門(mén)記錄日志的數(shù)據(jù)庫(kù)表,這樣系統(tǒng)用戶(hù)做的任何操作都可以被跟蹤記錄,使得管理員對(duì)用戶(hù)行為的管理變得容易,從而提高了系統(tǒng)的安全性。
圖4 日志查詢(xún)界面截圖
移動(dòng)辦公已逐漸成為一種潮流,電視臺(tái)作為媒體行業(yè),經(jīng)常要面臨外出拍攝、錄制節(jié)目的情況,在這種情況下的系統(tǒng)訪問(wèn)就需要依賴(lài)智能手機(jī)和PAD等移動(dòng)終端。本文系統(tǒng)提供了基于REST架構(gòu)(Representational State Transfer)和ngnix 負(fù)載均衡的Web服務(wù),支持給移動(dòng)終端提供知識(shí)全文檢索等功能,同時(shí)接口的設(shè)計(jì)也十分靈活,能夠適應(yīng)將來(lái)復(fù)雜業(yè)務(wù)的需要。手機(jī)端的開(kāi)發(fā)使用了mui框架,主要基于了HTML5+規(guī)范來(lái)編碼,可以支持安卓和蘋(píng)果兩套平臺(tái)打包。
本文以工作中知識(shí)管理需求為基礎(chǔ),在充分調(diào)查研究之后,采用SSH框架和HTML5+等開(kāi)發(fā)技術(shù),設(shè)計(jì)和實(shí)現(xiàn)了一套知識(shí)管理系統(tǒng),并且具備了很強(qiáng)的拓展性。系統(tǒng)的優(yōu)點(diǎn)主要有以下三點(diǎn):
(1)實(shí)現(xiàn)了知識(shí)的錄入、修改和綜合管理功能;
(2)知識(shí)庫(kù)功能,集成了搜索引擎功能;
(3)支持移動(dòng)端APP的訪問(wèn)在系統(tǒng)使用過(guò)程中可能會(huì)有大量的非結(jié)構(gòu)化數(shù)據(jù)導(dǎo)入到系統(tǒng)中,所以在未來(lái)我們可以考慮引入Nosql類(lèi)型的數(shù)據(jù)庫(kù)進(jìn)行這類(lèi)數(shù)據(jù)的管理,在數(shù)據(jù)量不斷增大時(shí),應(yīng)對(duì)將來(lái)可能的變化,這也將成為后續(xù)工作的重點(diǎn)。