一個完整的搜索系統
層次型倒排索引
基於前面非精確top K檢索中的勝者表的思路,實際搜索系統可以建立多層索引結構。
基本思路:建立多層索引,每層對應索引詞項的重要性
查詢處理過程中,從最高層索引開始。如果最高層索引已經返回至少k (比如, k = 100)個結果,那么停止處理並將結果返回給用戶。如果結果 < k 篇文檔,那么從下一層繼續處理,直至索引用完或者返回至少k 個結果為止。
例子:兩層的系統
第1層: 所有標題的索引
第2層: 文檔剩余部分的索引
標題中包含查詢詞的頁面相對於正文包含查詢詞的頁面而言,排名更應該靠前
注:很多人認為,Google (2000/01)搜索質量顯著高於其他競爭者的一個主要原因是使用了多層次索引。(當然還有PageRank、錨文本以及鄰近限制條件的使用)。
查詢詞項的鄰近性限制
對於檢索中的查詢,特別是Web上的自由文本查詢來說,用戶往往希望返回的文檔中與大部分或者全部查詢詞項之間的距離比較近,因為這表明返回文檔中具有聚焦用戶查詢意圖的文本。
考慮一個由兩個或者多個查詢詞項構成的查詢t1, t2, . . . , tk。令文檔d中包含所有查詢詞項的最小窗口大小為ω,其取值為窗口內詞的個數。例如,假設某篇文檔僅僅包含一個句子The quality of mercy is not strained,那么查詢strained mercy 在此文檔中的最小窗口大小是4。直觀上講,ω的值越小,文檔d和查詢匹配程度更高。如果文檔中不包含所有的查詢詞項,那么此時可以將ω設成一個非常大的數字。在計算時,還可以考慮各種可能的策略變化,比如在以單詞個數來計算窗口寬度ω時,可以不考慮停用詞的數目。
這種基於鄰近性(proximity)加權的評分函數已經和純余弦相似度計算方法有所不同,而更接近於目前包括Google在內的很多搜索引擎所提供並明顯在使用的“軟合取”(soft conjunctive)語義。
注:所謂“ 軟合取” 指的是在對一個包含多個詞項的查詢進行檢索時,檢索中的文檔中只要出現大部分查詢詞項即可,並不要求出現全部查詢詞項。
查詢分析器
給定rising interest rates 之類的查詢,如何處理?更一般地,給定我們前面介紹過的各種能夠影響文檔得分的因素,如何對這些因素進行組合?
上述問題的答案當然依賴於用戶數量、查詢分布及文檔集本身。通常情況下,會有一個查詢分析器(query parser)將用戶輸入的關鍵詞轉換成帶操作符的查詢,該查詢能夠基於底層的索引結構進行處理。有時,這種處理過程可能需要基於底層索引結果對多個查詢進行處理,比如,查詢分析器可能會產生如下的一系列查詢。
1. 將用戶輸入的查詢字符串看成一個短語查詢。利用向量空間模型求解,此時輸入查詢向量是以rising interest rates 為基的1 維向量。
2. 如果包含短語rising interest rates 的文檔數目少於10 篇,那么會將原始查詢看成rising interest 和interest rates 兩個查詢短語,同樣通過向量空間方法來計算。
3. 如果結果仍然少於10 個,那么重新利用向量空間模型求解,這時候認為3 個查詢詞項之間是互相獨立的。
上面的每一步在調用的情況下都會產生一系列帶得分的文檔列表結果,而每個得分必須融合向量空間計算、靜態得分、鄰近度加權或其他可能的因素,特別地,一篇文檔可能在上述的多個步驟結果列表中同時出現。這時就要求有一個綜合得分函數能夠融合不同來源的得分。
綜上一個完整的搜索系統示意圖

