這麼說吧,Lucene很簡單,其實就是個框架,用於全文檢索用的

我是風月連城,喜歡用簡單的語言闡述知識點
java

長期分享原創java文章,分享進階架構師學習筆記及學習資料算法

喜歡的大屌們能夠關注下,共同窗習,一塊兒進步數據庫


ps:因爲工資遲遲不發,影響心情,好幾天沒寫文章....架構


Lucene是什麼?框架

0 ) 關鍵詞:Lucene ,搜索,全文檢索工具

1)本質:一個Jar包,一個用於全文檢索的框架性能

2)做用:Lucene不是一個完整的全文索引應用,而是一個用Java寫的全文索引引擎工具包,它能夠方便的嵌入到各類應用中實現針對應用的全文索引/檢索功能。而數據庫執行模糊查詢都須要對全表掃描或索引掃描意味着消耗大量IO,若是模糊查詢常常發生,會形成數據庫性能惡化。學習

3 ) 好處 :優化

1 . 索引文件格式獨立於應用平臺。Lucene定義了一套以8位字節爲基礎的索引文件格式,使得兼容系統或者不一樣平臺的應用可以共享創建的索引文件。網站

2 . 在傳統全文檢索引擎的倒排索引的基礎上,實現了分塊索引,可以針對新的文件創建小文件索引,提高索引速度。而後經過與原有索引的合併,達到優化的目的。

3 . 優秀的面向對象的系統架構,使得對於Lucene擴展的學習難度下降,方便擴充新功能。

4 . 設計了獨立於語言和文件格式的文本分析接口,索引器經過接受Token流完成索引文件的創立,用戶擴展新的語言和文件格式,只須要實現文本分析的接口。

5 . 已經默認實現了一套強大的查詢引擎,用戶無需本身編寫代碼即便系統可得到強大的查詢能力,Lucene的查詢實現中默認實現了布爾操做、模糊查詢(Fuzzy Search)、分組查詢等等。

6 . 開源,可擴展能力強,有各類語言版本,適合各類平臺,

4 ) 場景:基於Lucene框架的搜索引擎有不少,如Solr,Elastic Search,Nutch

5 ) 中文 : 對於中文用戶來講,最關心的問題是其是否支持中文的全文檢索。但經過後面對於Lucene的結構的介紹,你會了解到因爲Lucene良好架構設計,對中文的支持只需對其語言詞法分析接口進行擴展就能實現對中文檢索的支持。

6 ) 主要的包(既然只是個框架,那確定得介紹裏面主要的一些包的做用啦):


7 ) 架構設計(Lucene主要作的兩件事):


如圖,簡單說全文檢索大致分兩個過程(主要作這兩件事),索引建立(Indexing)和 搜索索引(Search)。

一.索引建立入庫:文本內容經切詞後索引入庫 (即經過IndexWriter對不一樣的文件進行索引的建立,並將其保存在索引相關文件存儲的位置中),其入庫邏輯大體以下:

1.入庫者定義到庫中文檔的結構,好比須要把網站內容加載到全文檢索庫,讓用戶經過「站內檢索」搜索到相關的網頁內容。入庫文檔結構與關係型數據庫中的表結構相似,每一個入庫的文檔由多個字段構成,假設這裏須要入庫的網站內容包括以下字段:文章標題、做者、發佈時間、原文連接、正文內容(通常做爲網頁快照)。

2. 包含N個字段的文檔(DOCUMENT)在真正入庫前須要通過切詞(或分詞)索引,切詞的規則由語言分析器(ANALYZER)完成。

3. 切分後的「單詞」被註冊到索引樹上,供查詢時用,另外也須要把其它不須要索引的內容入庫,全部這些是文件操做均由STORAGE完成。

4. Lucene的索引樹結構很是優秀,是Lucene的一大特點。

二.搜索索引:就是獲得用戶的查詢請求,搜索所建立的索引,而後返回結果的過程。大體邏輯以下:

1. 查詢者輸入查詢條件,條件之間能夠經過特定運算符進行運算,好比查詢但願查詢到與「中國」和「北京」相關的記錄,但不但願結果中包括「海淀區中關村」,因而輸入條件爲「中國+北京-海淀區中關村」;

2. 查詢條件被傳達到查詢分析器中,分析器將將對「中國+北京-海 澱區中關村」進行分析,首先分析器解析字符串的鏈接符,即這裏的加號和減號,而後對每一個詞進行切詞,通常最小的詞元是兩個漢字,則中國和北京兩個詞沒必要再 切分,但對海淀區中關村須要切分,假設根據切詞算法,把該詞切分爲「海淀區」和「中關村」兩部分,則最後獲得的查詢條件能夠表示爲:「中國」 AND 「北京」 AND NOT(「海淀區」 AND 「中關村」)。

3.查詢器根據這個條件遍歷索引樹,獲得查詢結果,並返回結果集,返回的結果集(相似於JDBC中的ResultSet)

4. 將返回的結果集顯示在查詢結果頁面

5.須要注意的是,Lucene默認只支持英文,爲了便於說明問題,以上查詢過程採用中文舉例,事實上,當Lucene被擴充支持中文後就是這麼一個查詢過程。(各類好用的中文詞典分詞庫你們能夠自行百度下)

8 ) 原理 : 在Lucene中,就是使用這種「倒排索引」的技術,來實現相關映射。:


9 ) Demo實例 :沒有,就是這麼任性.快國慶了工資都沒發,吃土中...看到這裏的大屌們還不關注下?

相關文章
相關標籤/搜索