一 查詢子系統
1)邏輯運算式
綜合的搜尋引擎通常支援邏輯與,邏輯或,邏輯非這三種操作.多個查詢詞的時候要進行邏輯操作,通常空格預設為&,如果在多個查詢結果前進行預排序,那麼就可以把原來複雜的邏輯操作轉為有序集合的合併作業,時間複雜度僅為O(m+n).
2)排序
a)文本排序
常值內容是最重要的依據,而常值內容在詞彙的集合,因此排序主要考慮到文本詞彙的權重,涉及到的因素有:查詢詞的鄰近關係,命中位置(包括標題,META關鍵詞,還是本文),單篇文檔中的命中頻率.
b)網頁排序
網頁與文本的不同,是增加了meta元素和各種連結資訊。因此網頁的權重由三部分組成。
網頁權重= 文本詞彙的基本權重 + 連結權重 + 查詢使用者行為的加權
連結權重(url)主要考慮網頁入度(對外連結數),鏡像,目錄深度。
經典例子是google的pagerank.
3)分散式查詢
可以由一個模組向多個節點發出請求,然後對各個節點返回的結果進行合并,排序.這種情況應用在不相交資料集是能降低節點開銷,提高節點容錯性的.但要保證每一個文檔的全部索引項目在同一個節點上.
4)檢索的IO瓶頸
通過倒排索引得到文檔位置去取內容時,或者很大的倒排索引檔案,通過二級索引讀取索引詞對應的倒排資料時,IO都是檢索最佳化的重點.特別使用OS提供的底層檔案提供者read/write效率較好,此外使用記憶體檔案對應等其它機制可以大大提高IO訪問的效率.
5)緩衝
緩衝技術的原理是建在被緩衝對象訪問中存在的局部性特性上的.
緩衝包括查詢結果緩衝和倒排檔案快取.
因為硬碟IO一次讀取通常比記憶體一次讀取慢幾十倍甚至百倍;
查詢快取的效率為原來的所需要時間的倍數: =1-p(p為命中率)
查詢策略:LRU > LPU > FIFO
二 索引子系統
1)全文索引之倒排索引
倒排檔案(inverted file)實質上是描述一個詞項集合(terms)元素和一個文檔集合(docs)元素對應關係的資料結構.
2)其它索引檔案
記錄儲存: 使用改進後的ISAM檔案,以塊來標識儲存需要的空間,設定每個檔案的最大長度,在檔案尾標識上當前已經使用了的塊數,檔案內容用二進位儲存,位移量記錄為自己使用的塊數(記錄長度)+檔案已經使用了的塊數(記錄在檔案的位移位置).這種儲存方式便於修改內容變化不是特別大的記錄,特別適用於記錄沒有過分增長.
索引檔案: KEY--VALUE,如果是一對一,則使用類似STL中的MAP資料結構;如果是一對多,則使用MULTIMAP資料結構.有時為了快速查詢,還用於HASH結構進行儲存,以達到查詢0(1)的最佳效率.
3)混合索引