郭利敏
近年來隨著移動互聯網的發展以及伴隨著 google android手機和蘋果iphone手機的熱銷,智能手機和移動設備普及程度顯著提升。在移動互聯網趨勢下,世界各地的圖書館都紛紛推出了自己的移動客戶端。這意味著傳統的基于網頁檢索的體驗方式已遠遠不能滿足移動設備所能提供的體驗需求。上海圖書館在2011年11月20日發布了手機客戶端2.0版,旨在通過solr來整合現有的書目數據,給讀者帶來了更多不同的檢索體驗。
Lucene是apache軟件基金會jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。
Solr是一個高性能,采用Java5開發,基于Lucene的全文搜索服務器。同時對其進行了擴展,提供了比 Lucene更為豐富的查詢語言,同時實現了可配置、可擴展并對查詢性能進行了優化,并且提供了一個完善的功能管理界面。
該系統主要分為3部分,如圖1所示:

圖1
a) 對外服務的Web服務層,其中包含基于solrj的查詢代理,用于簡化Solr的查詢和查詢結果的數據轉換。
b) 基于Lucene索引的Solr服務器,為該檢索系統的核心,包含分面和文檔緩存(Caching)、索引建立和讀取的并發控制(Concurrency)、索引參數(Schema:schema.xml)、配置(Config:solrconfig.xml)、解析和索引及查詢請求的分析(Analysis)、更新處理(Update Handler)用于對XML、數據庫等數據來源的索引請求處理、引文件的創建、刪除、修改。
c) Horizon的格式化數據與Solr索引結構的轉換及索引文件的定期更新。
Solr必須運行在java 1.5級以上的版本和Servlet服務器中。本文在java1.6以及apache tomcat 6的基礎上進行搭建,Solr選用的是3.5.0。
首先下載 Solr(http://lucene.apache.org/solr),解壓后看到clien、contrib、dist、docs、example幾個目錄。在dist目錄中包含Solr運行所需要的所有相關的jar。example目錄下的webapp目錄中包含solr.war文件,是一個包含默認配置信息的web應用程序。
停止Tomcat服務,將solr.war復制到tomcat的webapps目錄下,并更名為 SolrHorizon.war。待重啟 Tomcat后,SolrHorizon.war會被自動發布名為SolrHorizon的web應用程并生成目錄相應的 SolrHorizon。由于此時采用的是默認配置,大多是基于Tomcat的環境配置,并不方便以后的資源管理和維護。所以修改webapps/SolrHorizon/WEB-INF目錄中的web.xml重新設定solr的home目錄。具體配置如下:

將solr的home目錄重新定向到webapps/SolrHorizon/solr這個目錄下。
配置完成后,運行 tomcat,打開 http://localhost:8080/SolrHorizon/admin/,若能看到Solr的管理界面,如圖2所示:

圖2 圖表
配置分詞器
目前基于 Lucene的分詞器比較流行的有 paoding、imdict、mmseg4j、ik,經過比較最終本文選擇mmseg4j,主要因為該分詞器帶有可擴展詞庫,并且一直保持著一定的開發活躍度。
具體配置如下:

此處配置了基于mmseg4j的3種分詞模式:complex、simple、max-word。Simple和 Complex,都是基于正向最大匹配。Max-word是在complex上面實現的最多分詞
IPAC基于MARC的書目數據模型,如表1所示:

表1 書目數據模型
其中bib為此書的id號,tag為該記錄所對應的MARC標識塊,text為該標識塊所對應的文字數據。
索引主要包括題名、主題、作者、isbn、issn、iscr、內容、出版商等。據此在solr提供的schema.xml做如下配置:

其中name表明該索引字段的名稱,index=true表明需要建索引,stored=true表明需要存儲該索引的內容以便可以直接查看,multiValued=true表明該索引是多值,type=”textComplex”定義該索引字段的存儲類型。
由于 IPAC數據模型與檢索模型之間無法實現自動匹配,所以需要編程實現轉換功能。
DataImport是solr提供的用于處理基于數據庫的數據源和REST數據源的功能模塊,能根據配置文件的內容對于多個數據庫表來建立索引文檔,同時通過配置能夠實現數據的全量索引(full imports)、增量索引(delta imports)和索引文檔的更新。
full-import:全量導入,通過訪問 URL http://url:port/solr/dataimport?command=full-import 完成。同時對應有一個
DataImport的配置如下:

對應的horizon-data-config.xml配置如下:

Query表示進行全量索引時候的sql語句。Transformer指代的是執行 query時候所對應的轉換程序,實現Transformer的接口內容由于ipac的marc記錄的數據模型無法與索引模型對應起來,所以需要自定義轉換模型(HorizonMarcTransformer、HorizonMarcTransformersub)。關鍵代碼如下:


查詢參數,如表2所示:

表2 查詢參數
通過以上的參數構建自己所需要的查詢條件,例: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為貨幣戰爭的書目信息,并返回 1條記錄)。返回結果如下:


responseHeader節點描述該記錄的查詢信息。Params節點描述的是參數信息。Result描述的是檢索結果,其中numFound="29"屬性表示總共命中29條,start="0"表示第一條記錄。Doc表明對應的一條檢索結果的詳細信息。
基于 solr的上海圖書館書目檢索系統在移動客戶端中的應用取得比較好的效果,該系統目前也只是一個原始的系統模型。從2011年到2012年8月該系統已經為上海圖書館手機客戶端提供了84897次數目檢服務,同時該系統構架也為市民數字閱讀門戶網站(http://e.library.sh.cn)提供穩定的數目檢所服務。在solr自有的http REST服務下初步封裝了一套更為便捷的檢索工具包。下一步將要基于面向服務的思想,基于solr提供一組上海圖書館書目檢索系統的服務api,給其他系統提供一個統一、便攜的服務,同時處于性能和安全的角度考慮,還會逐步采用分布式檢索的方式,在檢索結果方面也會逐步提供多種方式的排序,采用第三方的評分標注你等。進一步發揮solr的性能和優越性。
[1]中國移動互聯網發展狀況調查報告[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/