- 自己動手寫分布式搜索引擎
- 羅剛
- 810字
- 2020-11-28 15:52:39
1.3.2 全文索引
假如你想看書,說出你的要求后,有經驗的圖書管理員可以從他們的書庫中直接給你推薦幾本。查詢的基本過程與此類似,如圖1-4所示。

圖1-4 全文檢索的基本過程
例如有10篇文檔,編號為0~9。其中3篇文檔中包含查詢詞,匹配出來文檔集合{0,6,9}。對文檔集合按相關性排序,得到文檔數組{6,0,9}。返回結果中不僅存儲文檔,還存儲分值。
public class ScoreDoc { Document doc; //文檔相關的信息,包括文檔編號等 public float score; //表示這個文檔和查詢詞有多相關 }
查找文檔最原始的方式是通過文檔編號查找。就像一個人對應有一個身份證號,一個文檔從創建開始就有一個文檔編號。
有的專業書籍末尾有名詞術語索引,方便讀者定位名詞術語在書中出現的位置。為了按詞快速查找文檔,不是采用字符串匹配的方法在文檔中查詢詞,而是按詞建立文檔的索引。以詞為基礎建立的全文索引,也稱倒排索引,如圖1-5所示。在這里,索引中的文檔用編號表示。

圖1-5 以詞為基礎的全文索引
倒排索引是相對于正向索引來說的,首先用正向索引來存儲每個文檔對應的單詞列表,然后再建立倒排索引,根據單詞來索引文檔編號。
例如要索引如下兩個文檔:
Doc Id 1:自己動手寫搜索引擎;
Doc Id 2:自己動手寫網絡爬蟲。
首先把這兩個文檔中的內容分成一個個的單詞:
Doc Id 1:自己/動手/寫/搜索引擎;
Doc Id 2:自己/動手/寫/網絡爬蟲。
按詞建立的倒排索引結構見表1-1。
表1-1 倒排索引結構

每個詞后面的文檔編號(docId)列表稱為投遞列表(posting list)。除了在投遞列表中記錄文檔編號外,還可以添加詞頻和位置信息。詞頻的添加有助于結果的排序。位置信息記錄了一個索引詞在文檔中出現的位置,可以用于包含多個查詢詞的短語檢索;此外,也可以用于快速高亮顯示查詢詞。
索引子系統把要搜索的文檔先建立好索引,如圖1-6所示。

圖1-6 索引過程
待查詢的很多文檔放入同一個索引庫,可以使用特征函數對文檔中的詞加權。
搜索子系統針對用戶的即時查詢找出相關文檔,如圖1-7所示。

圖1-7 搜索過程
每個詞查詢出來一個文檔的集合。多個文檔集合做AND或者OR這樣的布爾操作。
- Spring Security 3
- Premiere Pro 2022從新手到高手
- 超簡單的攝影后期書
- Joomla! Social Networking with JomSocial
- 圖像處理中的數學修煉(第2版)
- Illustrator 2024從入門到精通
- AutoCAD 2020從入門到精通
- BackTrack 5 Wireless Penetration Testing Beginner's Guide
- PHP and MongoDB Web Development Beginner's Guide
- LaTeX入門與實戰應用
- LaTeX論文寫作教程
- 動畫制作基礎(項目教學版)
- Plone 3 Theming
- Photoshop CG 古風插畫繪制技法精解
- Building Websites with Mambo