倒排索引(數(shù)據(jù)庫)
時間:2022-12-15 20:30:01 | 來源:信息時代
時間:2022-12-15 20:30:01 來源:信息時代
倒排索引 : 一種用來迅速檢索所有包含某個查詢項的文檔的索引結(jié)構(gòu)。對于每個查詢項,在倒排文件中有包含該項的文檔列表(稱為倒排列表)。以圖1中的文本數(shù)據(jù)庫為例,查詢項“James”相應(yīng)的倒排列表為〈1,3,4〉,查詢項“movie”的倒排列表為〈3,4〉。
記錄標識 | 文檔 | 簽名 |
1 | agent James Bond | 1100 |
2 | agent mobile computer | 1101 |
3 | James Madison movie | 1011 |
4 | James Bond movie | 1110 |
單詞 | 倒排列表 | Hash |
agent | <1,2> | 1000 |
Bond | <1,4> | 0100 |
computer | <2> | 0100 |
James | <1,3,4> | 1000 |
Madison | <3> | 0001 |
mobile | <2> | 0001 |
movie | <3,4> | 0010 |
圖1 包括4條記錄和相應(yīng)索引的文本數(shù)據(jù)庫
圖1中給出了所有查詢項的倒排列表。為了迅速查找到某個查詢項的倒排列表,需要為所有可能的查詢項建立第二個索引結(jié)構(gòu)、如B
+-樹或Hash索引。為了避免混淆,我們把用來查找查詢項的索引稱為詞表索引。詞表索引由所有可能的查詢項和指向相應(yīng)倒排列表的指針組成。查詢包含某個查詢項的文檔的過程如下。首先在詞表索引中查找到對應(yīng)該查詢項倒排列表的結(jié)點,然后找到倒排列表,匹配記錄標識和文檔物理地址,最后檢索到相應(yīng)的文檔。對于包含多個查詢條件的查詢,可以首先找到每個查詢項的倒排列表,然后取它們的交集。為了盡量減少內(nèi)存的占用,可以按照倒排列表的長度從小到大進行順序抽取,由多個查詢條件析取組成的查詢,需要合并所有有關(guān)的倒排列表。
以圖1中的文本數(shù)據(jù)庫為例,查詢包含“James”的文檔,首先在詞表索引中查找“James”的倒排列表,從磁盤中讀出倒排列表,然后讀出文檔1。查詢包含“James”和 “Bond”的文檔,首先要檢索到查詢項“Bond”的倒排列表,與查詢項“James”的倒排列表相交(查詢項“Bond”的倒排列表長度為2,而查詢項“James”的倒排列表長度為3)。列表〈1,4〉和列表〈1,3,4〉相交的結(jié)果是〈1,4〉,也就是檢索到第一和第四個文檔。要查詢包含“James”或“Bond”的文檔,可以以任意順序讀取兩個查詢項的倒排列表,然后合并兩個查詢結(jié)果。