Lucene 原理分析之-代碼-筆記

索引建立和搜索過程所一個總結,如圖:java

1. 索引過程:spa

  • 1) 有一系列被索引文件
  • 2) 被索引文件通過語法分析和語言處理造成一系列詞(Term) 。
  • 3) 通過索引建立造成詞典和反向索引表。
  • 4) 經過索引存儲將索引寫入硬盤。

2. 搜索過程:.net

  • a) 用戶輸入查詢語句。
  • b) 對查詢語句通過語法分析和語言分析獲得一系列詞(Term) 。
  • c) 經過語法分析獲得一個查詢樹。
  • d) 經過索引存儲將索引讀入到內存。
  • e) 利用查詢樹搜索索引,從而獲得每一個詞(Term) 的文檔鏈表,對文檔鏈表進行交,差,並獲得結果文檔。
  • f) 將搜索到的結果文檔對查詢的相關性進行排序。
  • g) 返回查詢結果給用戶。

代碼參見::LuceneTest設計

  • D:\BaiduNetdiskDownload\code\activemq-producer\src\main\java\lucene\LuceneTest.java

 內存索引庫和文件索引庫結合

在lucene索引庫的建立的時候,咱們有兩種不一樣的索引庫建立方式3d

  • 文件索引庫

    • final Path docDir = Paths.get("index");code

      Directory directory=FSDirectory.open(Paths.get("index"));blog

    • 這樣建立的索引庫是在本地磁盤上建立一個index文件夾,排序

      • 而且將索引放在index中,也稱爲文件索引庫索引

        • 優勢:將索引持久化到磁盤上,能長久保存。內存

        • 缺點:相比較內存索引庫,讀取慢

  • 內存索引

    • Directory directory= new RAMDirectory();
    • 只須要一句代碼,就建立了一個內存索引庫

      • 優勢:讀取快

      • 缺點:不具有持久化能力,結束時候內存索引庫便會刪除

  • 兩種索引庫的結合

    • 根據兩種索引庫的特色咱們能夠將兩種索引庫結合起來,
      • 設計的思路是在程序啓動時,
      • 將文件索引庫中的索引拷貝到內存索引庫中,
      • 而後讓程序與內存索引庫交互,
      • 當交互完畢後再將內存索引庫的索引持久化到文件索引庫
    • 代碼詳見::
      • public static void multiIndex() throws IOException
相關文章
相關標籤/搜索