一 查詢子系統
1)邏輯表示式
綜合的搜尋引擎通常支援邏輯與,邏輯或,邏輯非這三種操作.多個查詢詞的時候要進行邏輯操作,通常空格預設為&,如果在多個查詢結果前進行預排序,那麼就可以把原來複雜的邏輯操作轉為有序集合的合併操作,時間複雜度僅為o(m+n).
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)混合索引
搜尋引擎 索引
正排索引 文件編號,單詞編號,單詞的數量,單詞出現的位置。倒排索引 1,單詞詞典,儲存單詞以及統計資訊,單詞在記錄表中的便宜,可常駐記憶體,用雜湊表儲存。2,記錄表,單詞對應的文件集合,記錄單詞出現的數目 位置。文件採用差分變長編碼。其中文件可按編號公升序排列 可利用差分編碼 也可按出現次數排列,可...
MySQL搜尋引擎程式 mysql搜尋引擎
mysql是我們比較常用的一種資料庫軟體。它有著諸多的優點,如開源的,免費的等等。其實它還有乙個很好的特點,那就是有多種引擎可以供你選擇。如果賽車手能根據不同的路況,地形隨手更換與之最適宜的引擎,那麼他們將創造奇蹟。然而目前他們還做不到那樣便捷的更換引擎,但是我們卻可以 所謂知己知彼方可百戰不殆,要...
lucene開發搜尋引擎的一些經驗
排序瓶頸,排序是乙個非常占用資源的功能,尤其是在資料量特別多的情況下,排序就顯示尤為突出,經過測試發現,排序主要和搜尋出的資料量有關,比如說搜尋出的資料是1w條和1k條的排序是不一樣的,但是和索引檔案的資料量關係不大,好搜尋100m和1g的關係不大,但是搜尋1g的也會慢,這是由於搜尋資料量有關,而不...