郭利敏
近年來隨著移動互聯(lián)網(wǎng)的發(fā)展以及伴隨著 google android手機和蘋果iphone手機的熱銷,智能手機和移動設(shè)備普及程度顯著提升。在移動互聯(lián)網(wǎng)趨勢下,世界各地的圖書館都紛紛推出了自己的移動客戶端。這意味著傳統(tǒng)的基于網(wǎng)頁檢索的體驗方式已遠遠不能滿足移動設(shè)備所能提供的體驗需求。上海圖書館在2011年11月20日發(fā)布了手機客戶端2.0版,旨在通過solr來整合現(xiàn)有的書目數(shù)據(jù),給讀者帶來了更多不同的檢索體驗。
Lucene是apache軟件基金會jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,以方便的在目標(biāo)系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。
Solr是一個高性能,采用Java5開發(fā),基于Lucene的全文搜索服務(wù)器。同時對其進行了擴展,提供了比 Lucene更為豐富的查詢語言,同時實現(xiàn)了可配置、可擴展并對查詢性能進行了優(yōu)化,并且提供了一個完善的功能管理界面。
該系統(tǒng)主要分為3部分,如圖1所示:
圖1
a) 對外服務(wù)的Web服務(wù)層,其中包含基于solrj的查詢代理,用于簡化Solr的查詢和查詢結(jié)果的數(shù)據(jù)轉(zhuǎn)換。
b) 基于Lucene索引的Solr服務(wù)器,為該檢索系統(tǒng)的核心,包含分面和文檔緩存(Caching)、索引建立和讀取的并發(fā)控制(Concurrency)、索引參數(shù)(Schema:schema.xml)、配置(Config:solrconfig.xml)、解析和索引及查詢請求的分析(Analysis)、更新處理(Update Handler)用于對XML、數(shù)據(jù)庫等數(shù)據(jù)來源的索引請求處理、引文件的創(chuàng)建、刪除、修改。
c) Horizon的格式化數(shù)據(jù)與Solr索引結(jié)構(gòu)的轉(zhuǎn)換及索引文件的定期更新。
Solr必須運行在java 1.5級以上的版本和Servlet服務(wù)器中。本文在java1.6以及apache tomcat 6的基礎(chǔ)上進行搭建,Solr選用的是3.5.0。
首先下載 Solr(http://lucene.apache.org/solr),解壓后看到clien、contrib、dist、docs、example幾個目錄。在dist目錄中包含Solr運行所需要的所有相關(guān)的jar。example目錄下的webapp目錄中包含solr.war文件,是一個包含默認配置信息的web應(yīng)用程序。
停止Tomcat服務(wù),將solr.war復(fù)制到tomcat的webapps目錄下,并更名為 SolrHorizon.war。待重啟 Tomcat后,SolrHorizon.war會被自動發(fā)布名為SolrHorizon的web應(yīng)用程并生成目錄相應(yīng)的 SolrHorizon。由于此時采用的是默認配置,大多是基于Tomcat的環(huán)境配置,并不方便以后的資源管理和維護。所以修改webapps/SolrHorizon/WEB-INF目錄中的web.xml重新設(shè)定solr的home目錄。具體配置如下:
將solr的home目錄重新定向到webapps/SolrHorizon/solr這個目錄下。
配置完成后,運行 tomcat,打開 http://localhost:8080/SolrHorizon/admin/,若能看到Solr的管理界面,如圖2所示:
圖2 圖表
配置分詞器
目前基于 Lucene的分詞器比較流行的有 paoding、imdict、mmseg4j、ik,經(jīng)過比較最終本文選擇mmseg4j,主要因為該分詞器帶有可擴展詞庫,并且一直保持著一定的開發(fā)活躍度。
具體配置如下:
此處配置了基于mmseg4j的3種分詞模式:complex、simple、max-word。Simple和 Complex,都是基于正向最大匹配。Max-word是在complex上面實現(xiàn)的最多分詞
IPAC基于MARC的書目數(shù)據(jù)模型,如表1所示:
表1 書目數(shù)據(jù)模型
其中bib為此書的id號,tag為該記錄所對應(yīng)的MARC標(biāo)識塊,text為該標(biāo)識塊所對應(yīng)的文字數(shù)據(jù)。
索引主要包括題名、主題、作者、isbn、issn、iscr、內(nèi)容、出版商等。據(jù)此在solr提供的schema.xml做如下配置:
其中name表明該索引字段的名稱,index=true表明需要建索引,stored=true表明需要存儲該索引的內(nèi)容以便可以直接查看,multiValued=true表明該索引是多值,type=”textComplex”定義該索引字段的存儲類型。
由于 IPAC數(shù)據(jù)模型與檢索模型之間無法實現(xiàn)自動匹配,所以需要編程實現(xiàn)轉(zhuǎn)換功能。
DataImport是solr提供的用于處理基于數(shù)據(jù)庫的數(shù)據(jù)源和REST數(shù)據(jù)源的功能模塊,能根據(jù)配置文件的內(nèi)容對于多個數(shù)據(jù)庫表來建立索引文檔,同時通過配置能夠?qū)崿F(xiàn)數(shù)據(jù)的全量索引(full imports)、增量索引(delta imports)和索引文檔的更新。
full-import:全量導(dǎo)入,通過訪問 URL http://url:port/solr/dataimport?command=full-import 完成。同時對應(yīng)有一個
DataImport的配置如下:
對應(yīng)的horizon-data-config.xml配置如下:
Query表示進行全量索引時候的sql語句。Transformer指代的是執(zhí)行 query時候所對應(yīng)的轉(zhuǎn)換程序,實現(xiàn)Transformer的接口內(nèi)容由于ipac的marc記錄的數(shù)據(jù)模型無法與索引模型對應(yīng)起來,所以需要自定義轉(zhuǎn)換模型(HorizonMarcTransformer、HorizonMarcTransformersub)。關(guān)鍵代碼如下:
查詢參數(shù),如表2所示:
表2 查詢參數(shù)
通過以上的參數(shù)構(gòu)建自己所需要的查詢條件,例:http://10.1.31.108:8080/SolrHorizon/select/?q=title%3A%E8%B4%A7%E5%B8%81%E6%88%98%E4%BA%89&start=0&r ows=1(查詢從 title為貨幣戰(zhàn)爭的書目信息,并返回 1條記錄)。返回結(jié)果如下:
responseHeader節(jié)點描述該記錄的查詢信息。Params節(jié)點描述的是參數(shù)信息。Result描述的是檢索結(jié)果,其中numFound="29"屬性表示總共命中29條,start="0"表示第一條記錄。Doc表明對應(yīng)的一條檢索結(jié)果的詳細信息。
基于 solr的上海圖書館書目檢索系統(tǒng)在移動客戶端中的應(yīng)用取得比較好的效果,該系統(tǒng)目前也只是一個原始的系統(tǒng)模型。從2011年到2012年8月該系統(tǒng)已經(jīng)為上海圖書館手機客戶端提供了84897次數(shù)目檢服務(wù),同時該系統(tǒng)構(gòu)架也為市民數(shù)字閱讀門戶網(wǎng)站(http://e.library.sh.cn)提供穩(wěn)定的數(shù)目檢所服務(wù)。在solr自有的http REST服務(wù)下初步封裝了一套更為便捷的檢索工具包。下一步將要基于面向服務(wù)的思想,基于solr提供一組上海圖書館書目檢索系統(tǒng)的服務(wù)api,給其他系統(tǒng)提供一個統(tǒng)一、便攜的服務(wù),同時處于性能和安全的角度考慮,還會逐步采用分布式檢索的方式,在檢索結(jié)果方面也會逐步提供多種方式的排序,采用第三方的評分標(biāo)注你等。進一步發(fā)揮solr的性能和優(yōu)越性。
[1]中國移動互聯(lián)網(wǎng)發(fā)展?fàn)顩r調(diào)查報告[OL][2011-03]http://www.cnnic.net.cn/dtygg/dtgg/201204/t20120405_2 4355.html
[2]Paoding Analysis-Lucene中文分詞“庖丁解?!盵OL]http://code.google.com/p/paoding/
[3]imdict-chinese-analyzerimdict智能詞典所采用的智能中文分詞程序[OL]http://code.google.com/p/imdict-chinese-analyzer/
[4]mmseg4j-MMSEG for java lucene chinese analyzer, or for solr[OL]http://code.google.com/p/mmseg4j/
[5] [5]MMSEG: A Word Identification System for Mandarin Chinese Text Based on Two Variants of the Maximum Matching Algorithm [OL]http://technology.chtsai.org/mmseg/
[6]ik-analyzer基于java的開源分詞器[OL]http://code.google.com/p/ik-analyzer/
[7]DataImportHandler– Solr Wiki[OL]http://wiki.apache.org/solr/DataImportHandler
[8]CommonQueryParameters– Solr Wiki[OL]http://wiki.apache.org/solr/CommonQueryParameter s
[9]Apache Lucene Core[OL]http://lucene.apache.org/core/
[10][Apache Solr[OL]http://lucene.apache.org/solr/