索引建立和搜索過程所一個總結,如圖:java
![](http://static.javashuo.com/static/loading.gif)
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