Lucene 正排索引、倒排索引、數據庫 B+樹索引、Lucene原理圖


正排索引、倒排索引

1. 正排索引:文檔ID為Key,表中記錄了,關鍵詞出現的次數,出現的位置。優點:易維護。缺點:搜索的耗時太長。
2. 倒排索引:關鍵詞為Key,表中記錄了,文檔的ID,出現的頻率,出現的位置。優點:搜索耗時短。缺點:不易維護。
 
實現:
1. Lucene中Analyzer分詞器將有效的關鍵詞分解出來。
2. 關鍵詞:是按字符順序排列的,可以用二元搜索算法快速定位到關鍵詞。
3. 實現時:詞典文件、頻率文件、位置文件。詞典文件通過指針指向了頻率文件和位置文件。
4. 壓縮算法:保存數字時,只保存與上一個值的差值。節省字節數。

 

 

 

 

數據庫索引(B+tree)

B樹:

 

 

一顆m階的B樹;
1. 每個節點最多含有m個孩子;
2. 每個節點至少有【ceil(m/2)】個孩子,ceil(x)是一個取上限的函數。
 
B-樹的插入
滿足:左小右大;節點個數;
節點未滿:插入即可。節點已滿:需要分裂,上移到父節點。
 
B-樹的刪除
滿足:左小右大;節點個數;
若有左右孩子:需要上移,若沒有,直接刪除。
 
 
B+樹:
mysql的InnoDB引擎使用的B+樹;數據庫的索引機制;

 

 

B+樹的插入
滿足:左小右大;節點個數;
節點未滿:插入即可。節點已滿:需要分裂,上移到父節點。
 
B+樹的刪除
滿足:左小右大;節點個數;
直接刪除,或者從鄰近兄弟借元素,或者合並。
 
B-樹和B+樹的區別
1. B+樹的非葉子節點沒有指向關鍵字指針或數據;它們存放在同一塊盤中,一次加載進內存,有很好的空間局部性,IO次數可以降低。
2. B+樹所有的數據都在葉子節點。每次訪問路徑長度相同,若訪問的元素離根節點很近,則B樹訪問更迅速。
3. 數據庫索引采用B+樹的主要原因是B樹在提高了IO性能的同時並沒有解決元素遍歷效率低下的問題。B+tree葉子節點中增加了一個鏈指針,B+樹只需要取遍歷葉子節點可以實現整棵樹的遍歷。而且數據庫中基於范圍的查詢是非常頻繁的,B樹對基於范圍的查詢效率太低。
 

Lucene思路圖

1. 首先搜集數據
數據可以是文件系統,數據庫,網絡上,手工輸入的,或者像本例直接寫在內存上的
2. 通過數據創建索引
3. 用戶輸入關鍵字
4. 通過關鍵字創建查詢器
5. 根據查詢器到索引里獲取數據
6. 然后把查詢結果展示在用戶面前


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM