郭肇毅(樂山師范學院 計算機科學學院,四川 樂山 614000)
?
基于Lucene的站內搜索引擎開發研究
郭肇毅
(樂山師范學院計算機科學學院,四川樂山614000)
摘要:經典搜索引擎目前的性能已十分良好,但在對于某些特定網站內部信息的檢索方面,若采取直接嵌入經典搜索引擎的方式,往往效果不佳。本文基于Lucene這一全文檢索工具包,在對詞條進行分析方面,將Lu?cene自帶分析器與盤古分詞工具相結合,開發了一款針對一個經典論壇的站內搜索引擎,經檢測性能良好。
關鍵詞:Lucene;站內搜索引擎;盤古分詞
隨著信息化進程的深入,政務公開等的需要,許多機關事業單位、企業等都建立了自己單位、部門的網站。但是,要在這些網站中快速地查找到自己所需要的信息是一件十分費時、費力的工作,特別是對于某些BBS論壇,要想查找相關主題的帖子也是十分困難的。目前,很多網站采用內嵌Google、百度等搜索引擎的形式來做相關的搜索工作。但是,由于網站本身的特點,采用內嵌大型搜索引擎的方式往往會造成效率低下。因此,開發一款針對網站本身特點的站內搜索引擎十分必要[1]。
本文通過仔細鉆研搜索引擎的基本原理的前提下,基于一個著名的開源搜索引擎類庫—Lucene,開發了一款針對某個論壇的站內搜索引擎,經檢測搜索性能良好。
1.1搜索引擎簡介
所謂搜索引擎,就是按照一定的規則和方法,運用特定的計算機算法從網絡上搜索信息,并對搜索到的信息進行相應處理后,將用戶所要查找內容的相關信息展示給用戶。常見的搜索引擎主要有全文索引搜索引擎、目錄索引搜索引擎、元搜索引擎、垂直搜索引擎等。盡管搜索引擎如此多種多樣,但它們的組成結構大體上是一樣。一般搜索引擎包括5個組成部分:用戶接口(一般是圖形化接口)、網絡爬蟲、索引文件數據庫、搜索工具和索引工具[2]。其示意圖如圖1所示。

圖1 搜索引擎結構示意圖
搜索引擎的大致原理如下。
①通過網絡爬蟲抓取因特網上的信息。其具體流程為:根據信息是否有關,若是相關信息,則將相應的網頁內容下載下來,以便之后建立索引等相關操作,同時查看該網頁是否含有其他鏈接,若有,同樣將其存儲下來以便之后的搜索。網絡爬蟲搜索抓取信息主要采用深度優先搜索算法和廣度優先搜索算法。
②索引工具是建立索引的工具,原理是將網頁內容按照特定的算法處理后,建立相應的索引保存到索引文件數據庫。建立索引的目的是為了之后查找的方便,類似于書本中的目錄。書本有了目錄,查找相應的內容就會方便很多。其中,倒排索引是一種常見的索引形式,而這是Lucene采用的索引形式。
③當用戶想要查找某些信息的時候,用戶通過相應的搜索引擎用戶接口輸入想要查找的內容,特定的搜索工具對用戶輸入的信息進行一些特定處理,然后在索引文件數據庫中查找相關的內容,查找到后,將相關的信息通過用戶接口反饋給用戶。
1.2Lucene簡介
Lucene是一個開源的全文檢索工具包,原作者叫Doug Cutting。Lucene最初只有java版本,但因其強大的功能,逐漸有了很多其他語言的版本,比如C++、C#、Perl等,而且全球的愛好者在不斷地對其進行完善。
使用Lucene從文檔中檢索關鍵字時,大體上可以分為以下步驟:①對要進行查找的文檔進行預處理;②將大文檔切分成多個小文檔;③為相應的文檔構建索引;④構建查詢對象;⑤再在索引中查找相關內容。
在Lucene中,可以按關鍵詞查詢指定的列,根據相關度返回結果,也可以自定義搜索結果排序方式。
由于在建立索引時,寫入索引并能夠被用戶檢索的是一個個詞條。因此,只有通過分詞才可能讓信息檢索系統理解用戶的檢索,進而為其搜索相關內容。Lucene本身自帶有分詞工具,但其工具性能不很優秀,而市面上也存在大量的第三方分詞工具,比如盤古分詞就是其中的一種。
實驗采用的Lucene版本是v2.9.4的.net版本,所用到的盤古分詞采用的是v2.3.1。實驗采用ASP.NET進行用戶界面的開發,借鑒了很多知名搜索引擎網站的風格特點,翻頁采用的是緩存與不多的IO相結合的機制,減少了多用戶同時訪問時對服務器帶來的壓力。另外,構建的索引文件是對一個知名論壇內部數據進行分析所構建出來的。
本實驗主要的創新點在如下。
①用盤古分詞的分析器分析輸入關鍵字的各個被切分出(盤古分詞器切分的)的部分的權重,然后在索引中的Title域和Content域中查找這些權重不同的部分。
②用lucene自帶的Ngram和StandardAnalyzer切分并分析輸入關鍵字的權重,分析權重的具體操作如下:首先切出的詞的最短長度是輸入關鍵字的一半,然后如果輸入關鍵字是三字詞或以上,那么則賦予這個關鍵字所有切分出的部分以較高的權重,且被切出的部分字數越多權重越大;如果輸入關鍵字是兩字詞或以下,那么賦予該兩字詞以較高的權重,切出的單字以較低的權重(因為用戶輸入的是兩字詞,說明這個兩字詞一定是一個很特殊且很重要的詞,故可以賦予較高的權重),然后這部分是在Title這個域中去查詢,加上前面建索引的時候將Title的權重用setBoost提高一點,通過這兩種方式來提高標題命中所占的權重。
③用①和②中的東西進行BooleanQuery,如果關鍵字的長度大于4,則二者取或,否則,二者取與,這樣可以既保證準確性,又保證搜到盡可能多的東西。
表1所示為搜索“果手”所顯示的前10條記錄。

表1 實驗效果圖
從表1中可以發現,站內搜索引擎性能基本能夠達到市面上著名搜索引擎的效果。
本文基于Lucene這一全文檢索開發包,開發了一款適應于具體某個著名論壇的站內搜索引擎,通過整個開發過程,發現盡管Lucene已經非常優秀,但其也有相對薄弱的地方,比如自帶的分析器還不夠十分強大,而市面上分詞工具雖然能夠與之結合,取得不錯的性能,但仍有提高的空間,在之后的研究中,可以考慮引入深度學習的思想,來改進現有的分詞工具,使最后得到的搜索引擎效果更好。
參考文獻:
[1]馬志強,劉利民,蘇依拉,等.基于Lucene的站內搜索引擎研究[J].內蒙古工業大學學報,2009,28(1):52-57.
[2]衛權崗,馬建紅,劉靜.基于Lucene的WEB站內搜索引擎的研究與實現[J].信息通信,2011(5):97-98.
中圖分類號:TP391.3
文獻標識碼:A
文章編號:1003-5168(2016)02-0021-02
收稿日期:2016-02-03
作者簡介:郭肇毅(1987-),男,碩士,助教,研究方向:自然語言處理。
Research on the Development of the Search Engine Based on Lucene
Guo Zhaoyi
(Leshan Normal University,School of Computer Science,Leshan Sichuan 614000)
Abstract:The performance of the classic search engine is very well nowadays.However,on the search of some special websites’internal information,the result is not very good if adopting directly embed the clas?sic search engine.This paper developed a search engine inside the website for a classic bbs,by taking ad?vantage of lucene,which is afull-text searchtool kit.On the side of analyzing word term,we adopt the ana?lyzer which belongs to the Lucene itself and PanGu Analyzer.The performance of our search engine is quite good by detecting.
Keywords:Lucene;search engine inside the website;PanGu Analyzer