?

基于solr的汽車數據檢索組件的設計與實現

2017-11-15 21:23陳辰唐蘭文張超
電腦知識與技術 2017年28期

陳辰+唐蘭文+張超

摘要:隨著信息化的高速發展,汽車業與信息技術充分融合為一體。伴隨著汽車業的快速發展,汽車數據也呈現爆炸式的增長。汽車數據的檢索是汽車信息化最重要的部分,而對于汽車數據的檢索來說如何在海量的汽車數據中快速、精準地查找到需要的數據,是評價其功能的重要指標,也是一個重要的研究問題。該文針對該問題,對solr搜索框架和Jcseg中文分詞器進行了研究,并結合JAVA設計封裝成可重用的組件,從而提高對汽車數據的檢索速度。

關鍵詞:快速搜索;Solr;Jcseg;中文分詞

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)28-0012-03

當今是信息化時代,更是大數據時代,信息的增長呈現出爆炸式態勢。而伴隨著汽車業的高速發展,汽車業相關技術和材料也在飛快的更新換代,由此產生的汽車相關數據也越來越龐大。如此龐大的與汽車相關的數據信息的聚合匯聚,產生了海量復雜的信息。而龐大且雜亂的信息量導致獲取和整理有效信息的難度和復雜度的大大增加,而垃圾信息的獲取概率也隨之增大。于是,人們開始思考如何精準且快速地獲取有用信息,這就造成了對應的搜索技術與工具的應運而生。通用的搜索技術有數據庫技術和搜索引擎技術。數據庫技術在傳統的信息系統中搜索性能表現良好,但是涉及大數據量的情況,表現就有點差強人意。而且使用方式比較單一。而以搜索引擎技術而生成的作為專門的信息搜索工具的搜索引擎,可以幫助用戶盡可能快速且精確地從龐大的信息量中檢索整理出符合條件的信息。搜索引擎的出現符合時代的潮流,因此,作為朝陽產業的搜索引擎從其誕生至今,雖然僅僅只經理了10多年的時間,卻取得了異常迅速的發展。

搜索引擎在發展的過程中經歷了許多具有里程碑意義的歷史事件,它們一步步的奠定了搜索引擎在今天的地位。

搜索引擎的發展也是一步步由稚嫩走向成熟的:初始時,麥吉爾大學的一位學生在1990年發明了搜索引擎的雛形“Archie”,而其只是一個可以搜索的文件名列表,列表內容由FTP文件名組成,查詢時用戶輸入精確的文件名,“Archie”會返回FTP站點,用戶可以通過該站點來獲得對應的文件。在1993年Martin Koster基于“Archie”發明了Archie的HTTP版本的搜索引擎ALIWEB,ALIWEB的功能類似Yahoo!,可以通過主動提交信息來建立鏈接索引。同年,用于分析字詞關系的Excite被斯坦福大學的學生所發明,Excite能夠對互聯網上信息進行更有效的搜索,達到了更好的搜索的效果。而經過四年的積蓄與發展,卡耐基梅隆大學的Michael Mauldin于1997年發明了搜索引擎Lycos,Lycos提供相關度排序,前綴匹配和字符相近限制搜索,并且第一次在索引程序中接入了spider程序的方法和使用了網頁自動摘要的方法。而集成搜索、多語言支持、用戶界面等功能于一體的Google于1998年誕生,其為搜索引擎帶來了技術革新。

值得一提的是,相較于國外,國內對搜索引擎的研究起步較晚,但是也取得了一定的成就。搜索引擎分類眾多,但是基本思想卻是一致的。要做的首先都是對目標信息進行搜集,然后按照各自集成的方法對搜集到的信息進行分析和處理,并按照一定的數據結構將分析后的信息數據保存下來,最后,用戶從這些被保存的信息數據中檢索到有用的信息。由于大型商業搜索引擎只有少數人可以接觸到,開源搜索引擎應運而生。在開源搜索引擎中最流行的產品應當是來自于Lucene家族的,很多知名的搜索引擎都是該家族以Lucene庫為基礎派生出的。而Solr就是在Lucene基礎之上實現的一個開源的搜索引擎。開發者可以通過其對應的配置文件,對Solr搜索引擎進行功能配置,從而實現強大的搜索功能,而且solr搜索引擎的查詢和索引的效率都是極高的,因此, Solr搜索引擎是大多數開發者的首選。

1 技術簡介

1.1 Lucene

Lucene是一個開源的全文檢索工具包,同時是Apache軟件基金會Jakarta下的一個子項目。不幸的是,Lucene僅僅提供了構建檢索工具所需要的基礎架構,而不是一個完整的搜索引擎,但是開發者可以利用Lucene的基礎架構結合自己的思路快速地開發出符合自己想法的搜索引擎。Lucene于2001年被捐獻給Apache,其作者Doug Cutting,而其本身就是一位在全文檢索方面資深的專家。Lucene經過多年的發展和完善,逐步成為了當下最流行的開源的java全文檢索工具包,現在Lucene的最新版本為6.6.0版本。值得一提的是,eclipse就使用了Lucene作為全文檢索工具來檢索幫助文檔。

1.2 Solr

Solr全稱Search On Lucene Replication,是一個開源的全文搜索服務器。它是基于Apache Lucene并對其進行了擴展,從而實現的。它不僅提供了比Lucene更為豐富的查詢語言,還提供了一個完善的功能管理界面。Solr基于JAVA語言開發,是一個高性能、可配置、可擴展、獨立的企業級搜索應用服務器。在Solr中,資源是以含有能唯一標識其自身的屬性Document為對象進行存儲的,標識其自身的屬性的默認名為id,其功能在Schema配置文件中進行描述。每個文檔都是由一系列的表示資源的一個屬性的Field所構成。Solr對外提供的接口類似于webservice的api接口。用戶可以通過發送http請求將一定格式的XML文件提交到加載Solr搜索引擎的服務器中,此時服務器會生成與其對應索引;當然,用戶也可以通過Http Get操作向加載Solr搜索引擎的服務器發出查找的請求,此時服務器會返回一個以XML為格式結果。

1.3 Jcseg

jcseg是一個基于JAVA開發和流行的mmseg算法實現的中文分詞器,并且其是開源的。jcseg是一款獨立的分詞組件,并且提供了針對solr的分詞接口。Jcseg具有很強大的功能特性:由于使用mmseg算法,jcseg分詞準確率高達98.41%;同時支持自定義詞庫,對于詞庫和詞庫中的內容開發者可以很方便地進行添加/更改和刪除,除此之外,開發者還可以對詞庫分類;jcseg不僅支持同義詞匹配還可以對分詞拼音進行追加。同時jcseg整合了《現代漢語詞典》和cc-cedict詞典中的詞條,并且根據cc-cedict詞典和詞條的對照jcseg還為詞條標上了拼音;jcseg支持中文分數和中文數字識別,并且自動將中文數字轉換為阿拉伯數字加入分詞結果;jcseg支持中英文混合詞的識別;有更好的英文支持,如電子郵件、網址等;支持自動半角/圓角、大小寫轉換;支持特殊字符(如I,II)識別,特殊數字的識別,智能中文人名識別;jcseg通過開啟一個守護線程隨時監測詞庫更新并隨時加載。endprint

2 系統架構

為了管理的方便性,以及將來系統的擴展性,該設計采取的方法盡量分離了管理結構與普通應用,為了達到方便管理的目的,該設計使用方法將所有管理功能都盡可能地納入同一個Web頁面下。如下圖所示,該設計有8個模塊:Solr Core API、New API、索引庫、查詢、索引更新、索引刪除、 網絡蜘蛛、分詞。在這8個模塊中,開發者需要自己來實現除了Solr API模塊以外的其他七個模塊。在下圖中不同模塊之間調用關系用箭頭表示,需要通過修改solr配置文件實現來實現的模塊用虛箭頭表示。

2.1 分詞模塊的設計與實現

在搜索引擎中分詞模塊的地位極其重要,因為搜索引擎最后的搜索結果很大程度上是由分詞的結果決定的,而在實際需求中,中文搜索是常見的功能需求。為了讓Solr搜索引擎支持檢索中文,這里需要選擇Jcseg中文分詞器。Jcseg中文分詞器和Solr的整合比較簡單,開發者只需要更改Solr的配置文件即可。首先,將Jcseg的配置文件Jcsegjcseg.properties,目錄lexicon\,以及\output下的jcseg-core-1.9.5.jar與jcseg-solr-1.9.5.jar拷貝到Solr工程的lib目錄下,這樣就做好了準備工作;接著,需要修改Solr的配置文件:solr-5.5.0\server\solr\collection1\conf,并添加如下內容:

這樣,就定義了一個叫作show_text的類型,之后所有被定義為這個類型的字段(Field),在建立索引和查詢的時候都會使用jcseg analyzer進行分詞,包括中文。

2.2 查詢模塊的設計與實現

查詢模塊主要通過servelt技術實現。用戶在查詢頁面表單里輸入要查詢的關鍵詞,點擊查詢按鈕向服務器發送查詢請求,服務器收到請求后,獲得查詢參數,調用Solr對外提供的HTTP接口,獲取查詢的結果對象,并將查詢結果放到頁面返回給用戶。

2.3 管理模塊的設計與實現

管理模塊簡化了Solr的添加、更新和刪除操作。主要通過servlet技術實現,用戶在頁面上選擇要添加到索引庫的文件并上傳至服務器,服務器接受到請求后會把該文件保存在服務器的附件目錄下,然后調用Solr對外提供的索引相關的接口,創建索引,創建完索引后,就可以在搜索頁面對該資源進行搜索。更新和刪除索引執行類似的操作即可。

2.4 編輯配置文件

在Solr中,主要的配置文件有3個,這三個配置文件的格式都是xml,它們分別是:schema.xml、solrconfig.xml和solr.xml。而搜索器及其相關參數使用默認值即可,因此,不需要對solrconfig做特別配置。

配置schema.xml需要string 和text這兩個fieldtype。其中text指出在該類型對于搜索內容進行分詞采用的是中文分詞類;field有id、url、text和title四個;id對應string類型表示文檔的序號、url對應string類型表示網頁的鏈接地址、text對應text類型為網頁的內容、title對應text類型為網頁的標題,title和text需要分詞和建立索引。Text為默認的搜索字段,建立在以上基礎上使用者就可以達到搜索某個網頁的文字信息的目的了。

2.5 New API模塊的設計與實現

New API主要是為了簡化Solr索引的操作,使用JAVA對Solr對外開放的API進行了二次封裝,在Solr原有的基礎之上,添加了自動生成配置文件的機制,該機制,可以在創建索引后,創建XML配置文件,并提供對外接口處理該XML配置文件,當傳入該格式的配置文件后,能夠重復所記錄下的操作,方便索引的遷移;修改了默認創建的索引格式,免去了大量的冗余,方便進行索引文虎,同時,將想要被索引到的內容統一放到一個字段內,統一管理該字段的分冊方式,方便進行全文搜索;封裝了同一個目錄下所有索引文件的增量更新,通過校驗文件的最后一次修改時間來判斷是否需要更新索引,這樣就節省了大量不必要的工作,節省了大量的時間,從而加快了更新的速度。與此同時,在用戶請求檢索數據的同時,檢查數據是否發生了修改或者刪除操作,以此來動態地維護索引,始終保持現有索引和檢索數據的一致性;使用了智能分詞器,并且制作了包含大量詞條的同義詞詞庫,對汽車專業的詞匯更加準確,并且實現了中英文、漢語和拼音的映射。

3 結論

Solr用于解決大數據量情況下搜索速度慢的問題,同時,為了支持中文檢索功能,可以使用Jcseg分詞器,通過修改Solr的配置文件,開發者可以方便地將Jcseg中文分詞器和Solr結合起來。本設計簡化了Solr自帶的管理器創建索引的方式,同時實現了自動生成配置文件的機制,在創建索引之后,可以創建XML格式的配置文件,同時提供了讀取配置文件的接口;通過Solrj實現了同一目錄下所有索引文件的批量更新,通過判定文件的最后修改時間來決定是否更新索引,從而節省了大量不必要的工作;制作了包含大量詞條的同義詞詞庫,因此對汽車專業詞匯的分詞更加準確,并且實現了中英文、漢字拼音之間的相互關聯。但是由于時間、精力、知識水平的制約,本設計也有需要提高的地方,比如未對搜索引擎的性能做改進等。

參考文獻:

[1] 李曉明,閆宏飛,王繼民.搜索引擎原理、技術與系統[M].北京:科學出版社,2005.

[2] Lucene官方網站.https://lucene.apache.org/

[3] solr官方網站.http://lucene.apache.org/solr/

[4] jcseg官方網站.https://sourceforge.net/projects/jcseg/

[5] SolrWiki.http://wiki.apache.org/solr/

[6] STL China 搜索引擎技術中心.http://www.stlchina.org/twiki/bin/view.pl/Main/SearchEngine

[7] 謝新洲.網絡信息檢索技術與案例[M].北京:北京圖書館出版社,2005.

[8] 喻平,譚鳴,夏小云.基于Lucene技術的垂直搜索引擎的研究[J].軟件導刊,2008.

[9] 中國互聯網絡信息中心 http://www.cnnic.net.cn

[10] 汪文勇.基于Lucene的Web站內信息搜索系統[D].電子科技大學,2005.

[11] Heritrix官方網站 http://crawler.archive.org/

[12] 苗奪謙,衛志華.中文文本信息處理的原理與應用[M].北京:清華大學出版社,2007.

[13] 葛微,羅圣美,周文輝.HiBase:一種基于分層式索引的高效HBase 查詢技術與系統[J].計算機學報,2015,38(35):1-15.endprint

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合