李雪山
(中國鐵道科學研究院 科學技術信息研究所,北京 100081)
基于Solr的分布式鐵路科技資源整合與檢索實踐
李雪山
(中國鐵道科學研究院 科學技術信息研究所,北京 100081)
根據(jù)鐵路科技信用與能力評價的實際需要,針對鐵路科技資源存儲、利用現(xiàn)狀,基于Solr開源搜索平臺,提出了分布式鐵路科技資源整合與檢索解決方案,設計了檢索框架,闡述了具體操作方法,進行了實際應用。
Solr;分布式;資源整合
鐵路科技信用與能力評價,是指按規(guī)范的指標體系和科學的評估方法,對被評價對象(如單位和個人)的科研行為、科研成果等全面了解、分析的基礎上,作出有關其科研能力、信用可靠性、安全性程度的估量。科技信用與能力評價有利于規(guī)范科研行為、避免科研失信、提高科研效率,降低科技投入風險。
鐵路科研行為、成果信息廣泛存在于被評價對象科研活動中,如立項申報、投標、課題實施、結題、科技獎勵、論文(專著)發(fā)表、專利申請授權及成果轉化情況等。而這些科研活動信息分散于不同的系統(tǒng)或網(wǎng)絡應用中,存在標準不統(tǒng)一、數(shù)據(jù)結構不統(tǒng)一、異構平臺和異構應用等問題。而要對被評價對象的科技信用和能力作出科學、全面的評價,則應首先對以上科技資源進行有效整合、充分利用。
數(shù)據(jù)資源整合應基于已有系統(tǒng)或應用,在不影響其正常運行的基礎上,對其部分或全部數(shù)據(jù)進行抽取和有效利用。目前,搜索引擎技術不僅可以使得用戶快速獲得信息,且已成為數(shù)據(jù)資源整合的一個重要技術手段?;谒阉饕娴臄?shù)據(jù)整合方案已被越來越多的企業(yè)或技術人員研究應用。經(jīng)筆者調研,其主要應用模式有以下幾種:
(1)企業(yè)自己開發(fā)索引工具和軟件,對信息進行的索引、檢索,達到數(shù)據(jù)整合的目的。此模式存在軟件源碼、接口不開放,功能拓展和推廣應用困難。
(2)基于Lucene封裝實現(xiàn)信息索引。該模式在Lucene前期,其配套應用(Compass、Solr)還未推出前,有著較廣泛的應用,但存在工作量大、擴展性差、實際應用困難等問題。
(3)調用Google、百度的API實現(xiàn)信息索引。該模式對第三方搜索引擎具有較強依賴性,無法滿足后期業(yè)務擴展需要。
(4)基于Compass+Lucene實現(xiàn)信息索引。該模式適合對數(shù)據(jù)庫驅動的應用數(shù)據(jù)進行索引,是替代傳統(tǒng)的like ‘%expression%’來實現(xiàn)對varchar或clob等字段的索引。該模式對于實現(xiàn)站內搜索是一種值得采納的方案,但在分布式處理、接口封裝上尚需要用戶進行一定程度的封裝。
(5)基于Solr實現(xiàn)信息索引。該模式提供了較為完備的解決方案,封裝及擴展性均較好。
綜上,基于鐵路科技信用與能力評價的現(xiàn)狀,探究利用Solr對異構異源數(shù)據(jù)進行整合,提出了實現(xiàn)方法,并進行了實踐。
2.1 Solr簡介
Solr是Apache軟件基金會的一個開源子項目,它是一個高性能的、采用Java5開發(fā)的、基于Lucene全文搜索庫的企業(yè)搜索服務器。提供了強大的全文檢索、高亮顯示、分面搜索、動態(tài)集群、數(shù)據(jù)庫整合、分布式檢索、索引復制及豐富的文檔(如Word,PDF等)的處理和地理信息搜索等功能[1],并提供了完善的功能管理界面。
2.2 Solr與Lucene
Lucene也是Apache軟件基金會的一個子項目,是一個開放源代碼的全文檢索引擎工具包,它本身不是一個完整的搜索程序,只是搜索程序的核心和搜索模塊,可嵌入到各種應用中實現(xiàn)針對應用的索引、檢索功能[2]。
Solr是基于Lucene,并對Lucene的功能進行封裝和擴展后而形成的企業(yè)級搜索引擎。Solr實現(xiàn)了Lucene服務器化。Solr 和Lucene的區(qū)別主要為:Lucene本質上是搜索庫,需要進行二次開發(fā)才能集成到具體的應用中,而Solr是基于Lucene的獨立應用程序;Lucene專注于搜索底層的建設,而Solr專注于企業(yè)應用,不僅封裝了Lucene接口,實現(xiàn)了索引庫的讀寫,還可進行動態(tài)集群、數(shù)據(jù)庫整合、分布式檢索、索引復制等企業(yè)級應用操作。即,Solr是Lucene 面向企業(yè)搜索應用的擴展[3]。
2.3 Solr特性[4]
(1)易用性。Solr簡化了Lucene具體應用,使用戶無需或簡單編寫代碼就可實現(xiàn)其企業(yè)級應用。利用Solr,用戶在客戶端用POST方法向服務器發(fā)送請求,即可完成索引;Solr支持從數(shù)據(jù)庫、Web頁面和文本中直接導入數(shù)據(jù),進行索引;Solr還可根據(jù)需要修改配置文件,完成字段定義、是否被索引、是否存儲、中文分詞器、默認檢索字段、檢索方法等配置工作。
(2)異構性。Solr的一個突出特點是提供了對異構系統(tǒng)的數(shù)據(jù)整合方案,在動態(tài)集群、分布檢索、索引復制、檢索結果排序、查重、顯示等方面均提供了完整的解決方法。
(3)易集成性。Solr是一個Web應用,它支持PHP、Java、Perl、C#等多種客戶端調用其搜索和索引??蛻舳撕头斩酥g基于HTTP協(xié)議進行通信,客戶端可以創(chuàng)建HTTP請求,然后解析response成各語言能識別的對象或結果,這樣實現(xiàn)了Solr與多系統(tǒng)、多語言環(huán)境的集成。
目前,鐵路科技信用與能力評價所需數(shù)據(jù)分布在不同系統(tǒng)或應用中。如科研立項、實施及結題信息存在于科研系統(tǒng),招投標信息存在于科技招標系統(tǒng),鐵路科技成果鑒定、評審信息存在于成果管理系統(tǒng)中,獎勵信息則來源于國家科技部及鐵道學會網(wǎng)站,專利信息則來源于國家知識產(chǎn)權網(wǎng)站等?;谝陨蠈嶋H,筆者設計了檢索框架。該框架主要分為索引庫建立與檢索兩部分,簡述如下。
3.1 索引建立
如圖1所示,本文根據(jù)數(shù)據(jù)來源不同,采取了不同的數(shù)據(jù)采集、整合策略。因科研管理、招投標、成果管理等系統(tǒng)為筆者所在課題組開發(fā),擁有系統(tǒng)源代碼,并負責運營維護,在建立索引時,課題組在這些系統(tǒng)上部署了Solr索引模塊,實現(xiàn)了數(shù)據(jù)整合。具體過程如下:
(1)分析各系統(tǒng)要采集的數(shù)據(jù)信息(數(shù)據(jù)表及字段),在Schema.xml對采集字段進行元數(shù)據(jù)定義;

圖1 分布式索引檢索框架
(2)基于各系統(tǒng)業(yè)務數(shù)據(jù)庫,對已有數(shù)據(jù)進行批量導入,建立分布式異構索引庫;
(3)基于元數(shù)據(jù)定義,修改各業(yè)務系統(tǒng)相關代碼,對數(shù)據(jù)的增、刪、改等操作增加了Solr索引功能,實現(xiàn)了索引數(shù)據(jù)與具體業(yè)務數(shù)據(jù)的同步。
對于國家獎、鐵道學會獎、知識產(chǎn)權等非課題組管理的網(wǎng)站,利用Web-Harvest在通過對目標網(wǎng)站網(wǎng)頁結構進行分析的基礎上,提取了數(shù)據(jù),并通過Solr建立了索引,最終形成了分布式異構索引數(shù)據(jù)庫群。
3.2 數(shù)據(jù)檢索
Solr通過分布( Distributed)和復制( Replication)策略,實現(xiàn)了分布式數(shù)據(jù)的檢索[5]。Solr分布式檢索特性可將分布在多個服務器上的資源進行分別索引,再利用片(Shards)技術,將相同的檢索請求同時發(fā)送到集群內任意服務器進行檢索,最后將整合后的檢索結果返回到最初的調用服務器。此種特性使得分布式異構資源整合變得較為容易實現(xiàn)。檢索過程如圖2所示。

圖2 數(shù)據(jù)檢索流程
其中,Solr跨庫搜索器,主要接受用戶搜索查詢請求,并將用戶請求轉換為Solr內部語法格式后,向分布式shards發(fā)送查詢請求,并對查詢結果進行排序、查重、過濾后返回給用戶。Solr跨庫搜索器實現(xiàn)較為簡單,可部署于任意服務器上,其示例代碼如下:http://localhost/solr/selec t?shards=172.20.0.62:8083/solr, 172.20.0.65:8083/ solr&q=鐵路&facet=true&facet.field=name。其中,172.20.0.62:8083/solr與172.20.0.65:8083/solr為兩個分布式索引服務器地址。
4.1 Solr安裝配置
Solr的運行,需先安裝在JDK和Servlet 容器(如tomcat),然后下載Solr安裝文件(本文使用4.4版本),解壓后拷貝dist目錄下的solr-4.4.0.war文件到tomcat 的webapps 目錄下, 并重命名為solr.war。設定工作目錄為D:solrhome solr,并將example下multicore中配置文件拷貝到其中。打開webapps下Solr網(wǎng)站中的web.xml文件,在其中加入:
以指定工作目錄的位置。然后訪問http:// localhost:8080/solr出現(xiàn)Solr的系統(tǒng)管理界面,則配置成功。
4.2 中文分詞配置
英文以空格作為分隔符,而中文詞語之間沒有分隔,在建立中文搜索引擎時,首先需要對中文進行切詞。目前,此類工具較多如IKAnalyer、Paoding、mmseg4j等。本文使用mseg4j-1.9.1進行了切詞。將mseg4j下載并解壓后將其dist下的jar包拷貝到tomcatwebappssolrWEB-INFlib目錄中。最后,修改Schema.xml文檔中的內容,在
實現(xiàn)了對中文分詞器的配置。
4.3 元數(shù)據(jù)定義
在數(shù)據(jù)索引前,需先在Schema.xml文件中對要索引的字段進行定義,具體包括字段(fields),唯一標識符(uniqueKey),默認檢索字段(defaultSearchField),默認搜索設置(solrQueryParser)等。代碼片段如下:
…
//唯一標示符設置
其中
4.4 數(shù)據(jù)批量導入與索引庫建立
對已有的數(shù)據(jù),如鐵路科研立項、結題、成果鑒定等數(shù)據(jù),本文利用DataImportHandler進行了直接數(shù)據(jù)庫導入。其在Solr的主要配置如下:
在solrconfig.xml文件中加入:
class="org.apache.solr.handler.dataimport. DataImportHandler">
此步啟用了批量數(shù)據(jù)導入模塊,并指定了數(shù)據(jù)庫配置文件db-data-config.xml。
在db-data-config.xml中加入:
url="jdbc:sqlserver://localhost:1433;Datab aseName=bky" user="sa" password="sa"/>配置了數(shù)據(jù)庫名,訪問用戶名密碼等信息。 在db-data-config.xml中加入: query="select ID,PROJECT_NAME,MAIN _CONTENT from PROJECT" deltaImportQuery="select from PROJECT where ID ='$ {dataimporter.delta.ID}'" > 此部分為執(zhí)行導入配置了具體數(shù)據(jù)表及字段。deltaQuery 和deltaImportQuery 為執(zhí)行增量導入時的數(shù)據(jù)庫查詢語句,選擇CHANGEDATE的時間大于上次執(zhí)行導入的時間的條目,實現(xiàn)了增量導入,避免了全部導入重復內容浪費的時間。Query未執(zhí)行完全導入時執(zhí)行的數(shù)據(jù)庫查詢語句。 4.5 查詢、添加與刪除索引 Solr 提供了基于Java的API,即SolrJ。SolrJ對HTTP 鏈接和XML 命令進行了封裝,為使用Java代碼處理Solr更加方便,簡化了索引創(chuàng)建、搜索、排序和分類等操作。查詢主要代碼如下: HttpSolrServer solrServer= new HttpSolr-Server(URL); SolrQuery query = new SolrQuery(); query.setQuery(":"); QueryResponse rsp = solrServer.query( query ); SolrDocumentList docs = rsp.getResults();for ( Object obj:docs) { SolrDocument doc=(SolrDocument)obj; String name = (String ) doc.getFieldValue ("name"); } 通過SolrJ需先連接HttpSolrServer,定義SolrQuery,添加查詢語句setQuery(),然后通過QueryResponse 類型的對象讀出查詢結果;添加索引時,先創(chuàng)建SolrInputDocument對象,通過addField() 方法添加相應內容,最后執(zhí)行add()以及commit()即可;在建立連接的基礎上執(zhí)行deleteByQuery () 方法,并commit()即可刪除索引。 Solr作為一種開源的搜索引擎,具有功能強大、易實施、易應用,靈活性、可擴展性強等優(yōu)點,為數(shù)據(jù)資源整合、索引、檢索提供了一套較為簡單的模式。將其應用在網(wǎng)站索引、檢索及數(shù)據(jù)資源集成檢索等系統(tǒng)中具有明顯優(yōu)勢,前景廣闊。本文根據(jù)實際需求,基于Solr提出了分布式鐵路科技資源整合與檢索解決方案,設計了系統(tǒng)框架,并進行了實踐,取得了較好的效果。 [1] Apache Solr[EB/OL]. http://lucene.apache.org/solr/,2014-01-07. [2] 管建和,甘劍峰.基于Lucene全文檢索引擎的應用研究與實現(xiàn)[J].計算機工程與設計,2007(1):489-491. [3] netoearth. Apache Solr 介紹[EB/OL]. http://blog.netoearth. com/html/201104/apache-solr-介紹.htm,2014-1-4. [4] 張建勇,廖 鳳,劉小兵,陶超全.集群與負載均衡技術在國際科學引文數(shù)據(jù)庫服務系統(tǒng)中的應用研究[J].現(xiàn)代圖書情報技術,2010(6):25. [5] 馬鳳娟,吳鵬飛.基于solr的異構資源集成檢索框架設計與實現(xiàn)[J].現(xiàn)代情報,2012(8):133-135. 責任編輯 徐侃春 Solr-based practice and retrieval of distributed railway technology resource integration LI Xueshan According to the actual needs concerning the credit and capability evaluation of railway technology and the status quo with regard to the storage and utilization of railway technology resources, this paper, based on the solr open-source information retrieval platform, proposed the distributed solution to the railway technology resource integration and retrieval, designed the systematic framework, elaborated the specific operation methods and applied them in practice. Solr; distributed solution; resource integration U29∶TP39 A 1005-8451(2014)07-0039-05 2013-12-19 中國鐵路總公司科技研究開發(fā)計劃項目(2011Z011-A)。 李雪山 ,副研究員。5 結束語

( Scientif i c and Technical Information Research Institute, China Academy of Railway Sciences, Beijing 100081, China )