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

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

圖2 數據檢索流程
其中,Solr跨庫搜索器,主要接受用戶搜索查詢請求,并將用戶請求轉換為Solr內部語法格式后,向分布式shards發送查詢請求,并對查詢結果進行排序、查重、過濾后返回給用戶。Solr跨庫搜索器實現較為簡單,可部署于任意服務器上,其示例代碼如下: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網站中的web.xml文件,在其中加入:
以指定工作目錄的位置。然后訪問http:// localhost:8080/solr出現Solr的系統管理界面,則配置成功。
4.2 中文分詞配置
英文以空格作為分隔符,而中文詞語之間沒有分隔,在建立中文搜索引擎時,首先需要對中文進行切詞。目前,此類工具較多如IKAnalyer、Paoding、mmseg4j等。本文使用mseg4j-1.9.1進行了切詞。將mseg4j下載并解壓后將其dist下的jar包拷貝到tomcatwebappssolrWEB-INFlib目錄中。最后,修改Schema.xml文檔中的內容,在
實現了對中文分詞器的配置。
4.3 元數據定義
在數據索引前,需先在Schema.xml文件中對要索引的字段進行定義,具體包括字段(fields),唯一標識符(uniqueKey),默認檢索字段(defaultSearchField),默認搜索設置(solrQueryParser)等。代碼片段如下:
…
//唯一標示符設置
其中
4.4 數據批量導入與索引庫建立
對已有的數據,如鐵路科研立項、結題、成果鑒定等數據,本文利用DataImportHandler進行了直接數據庫導入。其在Solr的主要配置如下:
在solrconfig.xml文件中加入:
class="org.apache.solr.handler.dataimport. DataImportHandler">
此步啟用了批量數據導入模塊,并指定了數據庫配置文件db-data-config.xml。
在db-data-config.xml中加入:
url="jdbc:sqlserver://localhost:1433;Datab aseName=bky" user="sa" password="sa"/>配置了數據庫名,訪問用戶名密碼等信息。 在db-data-config.xml中加入: query="select ID,PROJECT_NAME,MAIN _CONTENT from PROJECT" deltaImportQuery="select from PROJECT where ID ='$ {dataimporter.delta.ID}'" > 此部分為執行導入配置了具體數據表及字段。deltaQuery 和deltaImportQuery 為執行增量導入時的數據庫查詢語句,選擇CHANGEDATE的時間大于上次執行導入的時間的條目,實現了增量導入,避免了全部導入重復內容浪費的時間。Query未執行完全導入時執行的數據庫查詢語句。 4.5 查詢、添加與刪除索引 Solr 提供了基于Java的API,即SolrJ。SolrJ對HTTP 鏈接和XML 命令進行了封裝,為使用Java代碼處理Solr更加方便,簡化了索引創建、搜索、排序和分類等操作。查詢主要代碼如下: 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 類型的對象讀出查詢結果;添加索引時,先創建SolrInputDocument對象,通過addField() 方法添加相應內容,最后執行add()以及commit()即可;在建立連接的基礎上執行deleteByQuery () 方法,并commit()即可刪除索引。 Solr作為一種開源的搜索引擎,具有功能強大、易實施、易應用,靈活性、可擴展性強等優點,為數據資源整合、索引、檢索提供了一套較為簡單的模式。將其應用在網站索引、檢索及數據資源集成檢索等系統中具有明顯優勢,前景廣闊。本文根據實際需求,基于Solr提出了分布式鐵路科技資源整合與檢索解決方案,設計了系統框架,并進行了實踐,取得了較好的效果。 [1] Apache Solr[EB/OL]. http://lucene.apache.org/solr/,2014-01-07. [2] 管建和,甘劍峰.基于Lucene全文檢索引擎的應用研究與實現[J].計算機工程與設計,2007(1):489-491. [3] netoearth. Apache Solr 介紹[EB/OL]. http://blog.netoearth. com/html/201104/apache-solr-介紹.htm,2014-1-4. [4] 張建勇,廖 鳳,劉小兵,陶超全.集群與負載均衡技術在國際科學引文數據庫服務系統中的應用研究[J].現代圖書情報技術,2010(6):25. [5] 馬鳳娟,吳鵬飛.基于solr的異構資源集成檢索框架設計與實現[J].現代情報,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 中國鐵路總公司科技研究開發計劃項目(2011Z011-A)。 李雪山 ,副研究員。5 結束語

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