1. 搜索介紹
1.1. 搜索的實現方案
1.1.1. 傳統的實現方案
根據用戶輸入的搜索關鍵字(java),應用服務器通過sql語句操作數據庫,數據庫返回搜索結果給應用服務器,應用服務器再響應用戶。
傳統實現方案的特點:用戶量很大,數據量也很大,數據庫服務器壓力很大,查詢速度慢。
1.1.2. lucene實現方案(全文檢索實現方案)
根據用戶輸入的搜索關鍵字(java),應用服務器通過lucene提供的API操作索引庫,索引庫返回相關搜索結果給應用服務器,應用服務器再響應用戶。
lucene的實現方案:解決用戶量很大,數據量也很大,業務系統對查詢速度要求高的業務需求(實時查詢)。
1.2. 數據查詢方法
1.2.1. 順序掃描法
舉個例子:我們有大量的文件,比如A、B、C......。需要找出文件內容中包含有java的所有文件。需要從A文件開始查找,再B文件,然後再C文件,一直找到最後一個文件,才能得到內容中包含有java的所有文件。
順序掃描法的特點:如果文件數量很多,查找速度很慢。
1.2.2. 倒排索引法(反向索引法)(重要)
舉個例子:使用新華字典查詢漢字,首先找到偏旁部首對應的目錄,再根據目錄找到目標漢字。
以lucene建立倒排索引:
文件一(編號0):we like java java java
文件二(編號1):we like lucene lucene luene
Term | (Doc,Freq) | (Pos) |
we | (0,1) (1,1) | (0) (0) |
like | (0,1) (1,1) | (1) (1) |
java | (0,3) | (2,3,4) |
lucene | (1,3) | (2,3,4) |
說明:
1. 倒排索引,就是建立詞語與文檔的對應關係(詞語再什麼文件出現,出現了多少詞,在什麼位置出現)
2. 查詢的時候,直接根據搜索關鍵字,在倒排索引中找到對應關係就可以。
1.3. 搜索技術的應用場景
1. 單機軟件搜索(wps ,office,excel,eclipse)
2. 站內搜索(京東,淘寶)
3. 垂直搜索(限定某個行業的搜索,比如:教育,醫療)
4. 平臺搜索(百度,360,搜狗)
2. lucene介紹
2.1. lucene是什麼
lucene是apache軟件基金會下的一個子項目。是一個成熟、免費、開放源代碼的全文檢索引擎工具包。提供了一套簡單易用的API,方便在目標系統中實現全文檢索功能。目前已經有很多應用系統的搜索功能是基於lucene來實現。比如eclipse幫助系統的搜索功能。
lucene能夠爲文本類型的數據建立索引,只需要把數據轉換成文本格式,lucene就可以對文檔進行索引和搜索。比如常見的word文檔、html文檔、pdf文檔。首先將文檔內容轉換成文本格式,交給lucene進行索引,把建立好的索引保存在硬盤或者內存中。然後根據用戶輸入的查詢條件,在索引文件中查找,返回查詢結果給用戶。
2.2. 全文檢索是什麼
全文檢索計算機通過索引程序,掃描文件中的每一個詞語,建立詞語與文件的對應關係(詞語在什麼文件出現,出現了多少次,在什麼位置出現)。
在查詢的時候,計算機通過檢索程序,根據搜索關鍵詞,在索引庫中查找目標內容。
2.3. lucene與搜索引擎區別
lucene是全文檢索引擎工具包,相當於汽車的發動機。搜索引擎是基於全文檢索實現,是可獨立運行的軟件系統,已經是產品,相當於汽車。
2.4. lucene官方網站
網址:http://lucene.apache.org/