按照詞被搜尋的頻率進行排序
(例子:漢字提示的功能,從user log中提取出每天搜尋頻率最高的詞,和這些詞命中的搜尋結果數,更新到伺服器中,然後提供補全提示功能。資料每天凌晨增量更新一次,保證資料的實時性。
使用者輸入,使用者每次按下鍵盤,觸發js的keydown事件,傳送乙個請求到cgi,cgi將使用者輸入的內容送到suggestsvr,suggestsvr分解使用者輸入串,根據編碼去樹中查詢,最後將結果壓入優先順序佇列中,返回搜尋頻率最高的前10個結果給使用者,值得一提的是,我們對返回結果的使用者的keyword做了分詞處理,以保證使用者的搜尋結果更加豐富
增加對拼音的支援,準備漢字到拼音對映表。存在的挑戰:
1.一字多音,例如阿,可以讀a,可以讀e,這就導致在二維陣列中,對「阿」查詢拼音的時候比較麻煩,這裡的做法是根據頻率選擇乙個搜尋頻率比較高的
2.同音短語,比如:手機和收集,對應的拼音都是"shou'ji",這種情況處理起來比較簡單,在上面的node結構中,有乙個docinfo *pdocinfo,以陣列的方式記錄了拼音對應的所有同音短語
3.簡拼,比如:sj,對應的可能是"手機",「收集」,「四級"........這種情況,在上面的node結構中,有乙個ctag=-2標識聲母,通過這種方式,可以很好的處理簡拼
4.混拼,比如:nuojy,對應的是「諾基亞」,混拼的處理方式和簡拼的方式比較類似
)搜尋「嬰兒「,標題中含有「寶寶」的也可以出來
搜尋「一」,標題中含有「1」的也可以出來
搜尋「諾積壓「,提示使用者是否需要搜尋」諾基亞「
同音判斷
搜尋」marcbook」,提示使用者是否需要搜尋「macbook」
步長判斷
為什麼需要分布式
減低資料壓力,便於並行處理
如何分布
資料切分方式
如何擴容
針對部分節點擴容,不需要每次都用翻倍的方式擴容
資料量不斷增大,索引檔案變大
增量切換的時間增長,切換的風險增加
增量索引和全量索引的合併
實時搜尋引擎
差分儲存
{1,4,7,9}儲存為{1,3,3,2}
vint壓縮
每位元組的高位表示是否還有剩餘位元組
低七位表示數值
0~127使用乙個位元組表示
128:00000001 10000000
web: 使用tws伺服器,接受使用者請求,處理業務邏輯,渲染頁面,80%以上的產品需求集中在這裡
commserver:協議分發伺服器,將不同的請求傳送到不同的後台
cacheserver:快取伺服器,協議級cache,支援即時刪除,lru淘汰,有70%左右的命中率
unionserver:聚合伺服器,將分布式搜尋系統返回的檢索結果合併
searchkernel:檢索伺服器,負責處理搜尋請求
docserver:文件伺服器,負責儲存具體的文件資訊,返回完整的文件資訊給使用者
indexserver:索引伺服器,負責生成索引
transferserver:中轉伺服器,負責綜合排序,將**資料格式化為搜尋的標準資料格式
使用者傳送搜尋請求,web層對使用者的輸入條件進行過濾,進行同義詞、直達…處理,將處理後的請求傳送到commserver
cache收到請求後判斷是否命中,命中則返回,不命中則**給unionserver,同時cache儲存返回結果
unionserver收到請求後,負載均衡,分發給各個searchkernel並行檢索
searchkernel的處理流程 :
searchkernel收到使用者請求,解析出查詢串
針對查詢串進行分析,生成語法樹
對語法樹每個節點,進行分詞查詢倒排索引
對查詢出的多個倒排索引按照語法關係,進行邏輯運算
按照docid進行其他查詢條件的過濾
對docid進行排序
將docid返回給unionsvr
searchkernel檢索後,返回排好序的docid集合
union對各個後台返回的docid集合進行合併
union把合併後的結果集傳送到docsvr,獲取完整文件資訊,返回給cachesvr
搜尋引擎 索引
正排索引 文件編號,單詞編號,單詞的數量,單詞出現的位置。倒排索引 1,單詞詞典,儲存單詞以及統計資訊,單詞在記錄表中的便宜,可常駐記憶體,用雜湊表儲存。2,記錄表,單詞對應的文件集合,記錄單詞出現的數目 位置。文件採用差分變長編碼。其中文件可按編號公升序排列 可利用差分編碼 也可按出現次數排列,可...
MySQL搜尋引擎程式 mysql搜尋引擎
mysql是我們比較常用的一種資料庫軟體。它有著諸多的優點,如開源的,免費的等等。其實它還有乙個很好的特點,那就是有多種引擎可以供你選擇。如果賽車手能根據不同的路況,地形隨手更換與之最適宜的引擎,那麼他們將創造奇蹟。然而目前他們還做不到那樣便捷的更換引擎,但是我們卻可以 所謂知己知彼方可百戰不殆,要...
搜尋引擎基礎知識1 搜尋引擎的技術架構
搜尋引擎按其工作方式主要可分為三種 分別是全文搜尋引擎 full text search engine 目錄索引類搜尋引擎 search index directory 元搜尋引擎 meta search engine 全文搜尋引擎 雖然有搜尋功能,但嚴格意義上不能稱為真正的搜尋引擎,只是按目錄分類...