Lucene

一. 什麼是全文檢索

  1. 數據分類
    咱們生活中的數據整體分爲兩種:結構化數據和非結構化數據。
    結構化數據:指具備固定格式或有限長度的數據,如數據庫,元數據等。
    非結構化數據:指不定長或無固定格式的數據,如郵件,word文檔等磁盤上的文件java

  2. 結構化數據搜索
    常見的結構化數據也就是數據庫中的數據。在數據庫中搜索很容易實現,一般都是使用sql語句進行查詢,並且能很快的獲得查詢結果。
    爲何數據庫搜索很容易?由於數據庫中的數據存儲是有規律的,有行有列並且數據格式、數據長度都是固定的。sql

  3. 非結構化數據查詢方法
    • 順序掃描法(Serial Scanning)
      所謂順序掃描,好比要找內容包含某一個字符串的文件,就是一個文檔一個文檔的看,對於每個文檔,從頭看到尾,若是此文檔包含此字符串,則此文檔爲咱們要找的文件,接着看下一個文件,直到掃描完全部的文件。如利用windows的搜索也能夠搜索文件內容,只是至關的慢。數據庫

    • 全文檢索(Full-text Search)
      將非結構化數據中的一部分信息提取出來,從新組織,使其變得有必定結構,而後對此有必定結構的數據進行搜索,從而達到搜索相對較快的目的。這部分從非結構化數據中提取出的而後從新組織的信息,咱們稱之索引。apache

    這種先創建索引,再對索引進行搜索的過程就叫全文檢索(Full-text Search)。windows

  4. 如何實現全文檢索
    可使用Lucene實現全文檢索。Lucene是apache下的一個開放源代碼的全文檢索引擎工具包。提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是爲軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能。數據結構

  5. 全文檢索的應用場景
    對於數據量大、數據結構不固定的數據可採用全文檢索方式搜索,好比百度、Google等搜索引擎、論壇站內搜索、電商網站站內搜索等。app

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

  1. 索引和搜索流程圖
    工具

    • 綠色表示索引過程,對要搜索的原始內容進行索引構建一個索引庫,索引過程包括:肯定原始內容即要搜索的內容採集文檔建立文檔分析文檔索引文檔網站

    • 紅色表示搜索過程,從索引庫中搜索內容,搜索過程包括:用戶經過搜索界面建立查詢執行搜索,從索引庫搜索渲染搜索結果搜索引擎

  2. 建立索引
    對文檔索引的過程,將用戶要搜索的文檔內容進行索引,索引存儲在索引庫(index)中。
    這裏咱們要搜索的文檔是磁盤上的文本文件,根據案例描述:凡是文件名或文件內容包括關鍵字的文件都要找出來,這裏要對文件名和文件內容建立索引。

  3. 得到原始文檔:是指要索引和搜索的內容。原始內容包括互聯網上的網頁、數據庫中的數據、磁盤上的文件等。

  4. 建立文檔對象
    獲取原始內容的目的是爲了索引,在索引前須要將原始內容建立成文檔(Document),文檔中包括一個一個的域(Field),域中存儲內容。
    這裏咱們能夠將磁盤上的一個文件當成一個document,Document中包括一些Field(file_name文件名稱、file_path文件路徑、file_size文件大小、file_content文件內容)。

    注意:每一個Document能夠有多個Field,不一樣的Document能夠有不一樣的Field,同一個Document能夠有相同的Field(域名和域值都相同)
    每一個文檔都有一個惟一的編號,就是文檔id

  5. 分析文檔
    將原始內容建立爲包含域(Field)的文檔(document),須要再對域中的內容進行分析,分析的過程是通過對原始文檔提取單詞、將字母轉爲小寫、去除標點符號、去除停用詞等過程生成最終的語彙單元,能夠將語彙單元理解爲一個一個的單詞。

    好比下邊的文檔通過分析以下:
    原文檔內容:
    Lucene is a Java full-text search engine. Lucene is not a complete
    application, but rather a code library and API that can easily be used
    to add search capabilities to applications.

    分析後獲得的語彙單元:
    lucene、java、full、search、engine。。。。

    每一個單詞叫作一個Term,不一樣的域中拆分出來的相同的單詞是不一樣的term。term中包含兩部分一部分是文檔的域名,另外一部分是單詞的內容。
    例如:文件名中包含apache和文件內容中包含的apache是不一樣的term。

  6. 查詢索引
    查詢索引也是搜索的過程。搜索就是用戶輸入關鍵字,從索引(index)中進行搜索的過程。根據關鍵字搜索索引,根據索引找到對應的文檔,從而找到要搜索的內容(這裏指磁盤上的文件)

三. 外連接

  1. 有序列表項 一
  2. 有序列表項 二
  3. 有序列表項 三
  4. 有序列表項 一
  5. 有序列表項 二
  6. 有序列表項 三
  7. 有序列表項 一
  8. 有序列表項 二
  9. 有序列表項 三
  10. 有序列表項 三

四. 無序列表

  1. 有序列表項 一
  2. 有序列表項 二
  3. 有序列表項 三
  4. 有序列表項 一
  5. 有序列表項 二
  6. 有序列表項 三
  7. 有序列表項 一
  8. 有序列表項 二
  9. 有序列表項 三
  10. 有序列表項 三

五. 有序列表

  1. 有序列表項 一
  2. 有序列表項 二
  3. 有序列表項 三
  4. 有序列表項 一
  5. 有序列表項 二
  6. 有序列表項 三
  7. 有序列表項 一
  8. 有序列表項 二
  9. 有序列表項 三
  10. 有序列表項 三
相關文章
相關標籤/搜索