(一)Lucene——基本概念介紹

1. Lucene是什麼

Lucene 是一個基於 Java 的全文信息檢索工具包,它不是一個完整的搜索應用程序,而是爲你的應用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一個開源項目。也是目前最爲流行的基於 Java 開源全文檢索工具包。html

2. 全文檢索的應用場景

  • 搜索引擎
  • 站內搜索
  • 文件系統搜索

3. 全文檢索的定義

全文檢索首先對要搜索的文檔進行分詞,而後造成索引,經過查詢索引來查詢文檔。
全文檢索就是先建立索引,而後根據索引來進行搜索的過程,就叫全文檢索。
好比:字典
字典的偏旁部首頁,就相似於luence的索引;字典的具體內容,就相似於luence的文檔內容java

4. Lucene實現全文檢索的流程

全文檢索的流程:索引流程、搜索流程web

  • 索引流程:採集數據—》文檔處理—》存儲到索引庫中
  • 搜索流程:輸入查詢條件—》經過lucene的查詢器查詢索引—》從索引庫中取出結—》視圖渲染
    Lucene自己不能進行視圖渲染。

6. Lucene 軟件包分析

Lucene 軟件包的發佈形式是一個 JAR 文件,下面介紹這個 JAR 文件裏面的主要的 JAVA 包。算法

  • Package: org.apache.lucene.document
    這個包提供了一些爲封裝要索引的文檔所須要的類,好比 Document, Field。這樣,每個文檔最終被封裝成了一個 Document 對象。
  • Package: org.apache.lucene.analysis
    這個包主要功能是對文檔進行分詞,由於文檔在創建索引以前必需要進行分詞,因此這個包的做用能夠當作是爲創建索引作準備工做。
  • Package: org.apache.lucene.index
    這個包提供了一些類來協助建立索引以及對建立好的索引進行更新。這裏面有兩個基礎的類:IndexWriter 和 IndexReader,其中 IndexWriter 是用來建立索引並添加文檔到索引中的,IndexReader 是用來刪除索引中的文檔的。
  • Package: org.apache.lucene.search
    這個包提供了對在創建好的索引上進行搜索所須要的類。好比 IndexSearcher 和 Hits, IndexSearcher 定義了在指定的索引上進行搜索的方法,Hits 用來保存搜索獲得的結果。

7. 索引相關概念

爲了對文檔進行索引,Lucene 提供了五個基礎的類,他們分別是 Document, Field, IndexWriter, Analyzer, Directory。下面分別介紹一下這五個類的用途:數據庫

  • Document
    Document 是用來描述文檔的,這裏的文檔能夠指一個 HTML 頁面,一封電子郵件,或者是一個文本文件。一個 Document 對象由多個 Field 對象組成的。能夠把一個 Document 對象想象成數據庫中的一個記錄,而每一個 Field 對象就是記錄的一個字段。
  • Field
    Field 對象是用來描述一個文檔的某個屬性的,好比一封電子郵件的標題和內容能夠用兩個 Field 對象分別描述。
  • Analyzer
    在一個文檔被索引以前,首先須要對文檔內容進行分詞處理,這部分工做就是由 Analyzer 來作的。Analyzer 類是一個抽象類,它有多個實現。針對不一樣的語言和應用須要選擇適合的 Analyzer。Analyzer 把分詞後的內容交給 IndexWriter 來創建索引。
  • IndexWriter
    IndexWriter 是 Lucene 用來建立索引的一個核心的類,他的做用是把一個個的 Document 對象加到索引中來。
  • Directory
    這個類表明了 Lucene 的索引的存儲的位置,這是一個抽象類,它目前有兩個實現,第一個是 FSDirectory,它表示一個存儲在文件系統中的索引的位置。第二個是 RAMDirectory,它表示一個存儲在內存當中的索引的位置。

8. 索引流程

8.1 爲何採集數據

全文檢索搜索的內容的格式是多種多樣的,好比:視頻、mp三、圖片、文檔等等。對於這種格式不一樣的數據,須要先將他們採集到本地,而後統一封裝到lucene的文檔對象中,也就是說須要將存儲的內容進行統一才能對它進行查詢。apache

8.2 採集數據的方式

  • 對於互聯網中的數據,使用爬蟲工具(http工具)將網頁爬取到本地
  • 對於數據庫中的數據,使用jdbc程序進行數據採集
  • 對於文件系統的數據,使用io流採集

由於目前搜索引擎主要搜索數據的來源是互聯網,搜索引擎使用一種爬蟲程序抓取網頁( 經過http抓取html網頁信息),如下是一些爬蟲項目網絡

  • Solr(http://lucene.apache.org/solr) ,solr是apache的一個子項目,支持從關係數據庫、xml文檔中提取原始數據。
  • Nutch(http://lucene.apache.org/nutch), Nutch是apache的一個子項目,包括大規模爬蟲工具,可以抓取和分辨web網站數據。
  • jsoup(http://jsoup.org/ ),jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套很是省力的API,可經過DOM,CSS以及相似於jQuery的操做方法來取出和操做數據。
  • heritrix(http://sourceforge.net/projects/archive-crawler/files/),Heritrix 是一個由 java 開發的、開源的網絡爬蟲,用戶可使用它來從網上抓取想要的資源。其最出色之處在於它良好的可擴展性,方便用戶實現本身的抓取邏輯。

8.3 索引文件的邏輯結構

  • 文檔域
    文檔域存儲的信息就是採集到的信息,經過Document對象來存儲,具體說是經過Document對象中field域來存儲數據
    好比:數據庫中一條記錄會存儲一個一個Document對象,數據庫中一列會存儲成Document中一個field域。
    文檔域中,Document對象之間是沒有關係的。並且每一個Document中的field域也不必定同樣。
  • 索引域
    索引域主要是爲了搜索使用的。索引域內容是通過lucene分詞以後存儲的。
  • 倒排索引表
    傳統方法是先找到文件,如何在文件中找內容,在文件內容中匹配搜索關鍵字,這種方法是順序掃描方法,數據量大就搜索慢。
    倒排索引結構是根據內容(詞語)找文檔,倒排索引結構也叫反向索引結構,包括索引和文檔兩部分,索引即詞彙表,它是在索引中匹配搜索關鍵字,因爲索引內容量有限而且採用固定優化算法搜索速度很快,找到了索引中的詞彙,詞彙與文檔關聯,從而最終找到了文檔。

附:
Lucene是開發全文檢索功能的工具包,使用時從官方網站下載,並解壓。
官方網站:http://lucene.apache.org/ 目前最新版本:7.0.1
下載地址:http://archive.apache.org/dist/lucene/java/ 下載版本:7.0.1工具

相關文章
相關標籤/搜索