Lucene 採用倒排索引結構,核心流程包含文件分析、關鍵字提取、索引建立三階段。
對兩篇範例文件處理:
Tom lives in Guangzhou, I live in Guangzhou too.He once lived in Shanghai.Analyzer 處理步驟:
in, once, too 等無語義詞彙lives, lived → live 支援變體匹配處理結果:
[tom] [live] [guangzhou] [i] [live] [guangzhou][he] [live] [shanghai]正向對應:文件號 → 關鍵字集合 → 反轉為 關鍵字 → 包含文件號集合
| 關鍵字 | 文件號 |
|---|---|
| guangzhou | 1 |
| he | 2 |
| i | 1 |
| live | 1,2 |
| shanghai | 2 |
| tom | 1 |
進階結構包含出現頻率與位置資訊(關鍵字位置而非字元位置,節省空間且支援片語查詢):
| 關鍵字 | 文件號[頻率] | 位置 |
|---|---|---|
| guangzhou | 1[2] | 3,6 |
| he | 2[1] | 1 |
| i | 1[1] | 4 |
| live | 1[2],2[1] | 2,5,2 |
| shanghai | 2[1] | 3 |
| tom | 1[1] | 1 |
live 解讀:文件 1 出現 2 次(位置 2,5),文件 2 出現 1 次(位置 2)。
關鍵字按字元序排列,支援二元搜尋快速定位。
標記關鍵字所屬邏輯欄位(標題、內容、URL 等),資訊儲存於詞典檔,每關鍵字關聯一或多個 Field。
<前綴長度, 後綴> 格式。例:阿拉伯語 承接 阿拉伯 → <3, 語>查詢 live:詞典二元搜尋 → 讀取頻率檔文件號 → 毫秒級回應。對比順序字串匹配:大量文件下時間不可接受。倒排索引將查詢複雜度從 O(N) 降至 O(log M),M 為唯一關鍵字數,遠小於文件總數 N。