一.執行流程
0.圖解
1.創建索引
(1)獲取原始文檔
基於那些文檔進行搜索,那就是原始文檔。
通過爬蟲可以獲取原始文檔。
(2)構建文檔對象
對應每一個原始文檔,並創建一個document對象。
一個document對象可以有多個域(field)。
域中保存的就是原始文檔的屬性。
其中屬性包含域的名稱和域的值。
每個文檔都有唯一的編號,就是文檔id。
(3)分析文檔
就是分詞的過程。
1.將根據空格將字符串進行分隔,得到一個單詞列表。
2.把單詞統一變成小寫。
3.去除標點符號。
4.去除停用詞。停用詞指的是無意義的詞。
5.每個關鍵詞封裝成一個Term對象。Term對象包含一個關鍵詞所在的域,一個關鍵詞本身。
注意:不同的域拆分出相同的關鍵詞是不同的Term對象。
(4)創建索引
基於關鍵詞列表來創建一個索引。保存到索引庫中。
索引庫內含:
- 索引
- document對象
- 關鍵詞和文檔的對應關係
通過詞語找文檔,這種索引結果稱之爲倒排索引結構。
2.查詢索引
(1)用戶查詢接口
用戶輸入查詢條件的地方。
(2)把關鍵詞封裝成一個查詢對象
需要包含倆個條件
條件一:查詢的域
條件二:查詢的關鍵詞
(3)執行查詢
根據要查詢的關鍵詞到對應的域上進行搜索。
找到關鍵詞,根據關鍵詞找到對應的文檔。
(4)渲染結果
根據文檔的id找到文檔對象。
根據關鍵詞進行高亮顯示,分頁處理等。
二.入門程序
1.創建索引
(1)環境
下載Lucene
安裝lucene的jdk版本不低於1.8。
鏈接:https://pan.baidu.com/s/1QhoQO1Zjl57lKX1KsfXzjQ
提取碼:aq4r
(2)工程搭建
- 創建一個java工程
- 添加jar包
lucene-analyzers-common-7.4.0.jar
lucene-core-7.4.0.jar
commons-io.jar
(3)步驟
1.創建一個Director對象,指定索引庫的位置。F:\temp
2.基於Director對象創建一個IndexWriter對象。
3.讀取磁盤上的原始文件,對應每個文件創建一個文檔對象。
4.向文檔對象添加域。
5.把文檔對象寫到索引庫。
6.關閉indexwriter對象。
(4)範例
第一步導入依賴
第二步LuceneFirst類
2.使用Luke查詢索引庫,要求jdk版本1.9
(1)使用說明
(2)索引庫信息頁
(3)文件信息頁
(4)域的信息頁
(5)搜索信息頁
3.查詢索引庫
(1)步驟
1.創建一個Director對象,指定索引庫的位置。
2.創建一個IndexReader對象。
3.創建一個IndexSearcher對象,構造方法參數中的參數IndexReader對象。
4.創建一個Query對象。TeamQuery。
5.執行查詢,得到一個TopDocs對象。
6.取出查詢結果的總記錄數。
7.取文檔列表。
8.打印文檔中的內容。
9.關閉IndexReader對象。