官术网_书友最值得收藏!

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這樣的布爾操作。

主站蜘蛛池模板: 安宁市| 顺义区| 木里| 右玉县| 青田县| 周宁县| 轮台县| 小金县| 射阳县| 景泰县| 永城市| 宜春市| 黔西| 河北区| 紫云| 长治市| 吉水县| 甘孜县| 金平| 集贤县| 盐城市| 汉阴县| 龙山县| 通山县| 哈尔滨市| 寿阳县| 延川县| 博白县| 崇义县| 英吉沙县| 舒兰市| 广东省| 贺州市| 鄂州市| 克什克腾旗| 大城县| 方城县| 高邮市| 清丰县| 黎川县| 宁津县|