與或搜索演算法
1. 基本演算法——深度優先搜索(DFS)和廣度優先搜索(BFS)
深度優先搜索和廣度優先搜索,都是圖形搜索演算法,它兩相似,又卻不同,在應用上也被用到不同的地方。這里拿一起討論,方便比較。
一、深度優先搜索
深度優先搜索屬於圖演算法的一種,是一個針對圖和樹的遍歷演算法,英文縮寫為DFS即Depth First Search。深度優先搜索是圖論中的經典演算法,利用深度優先搜索演算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用堆數據結構來輔助實現DFS演算法。其過程簡要來說是對每一個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。
基本步奏
(1)對於下面的樹而言,DFS方法首先從根節點1開始,其搜索節點順序是1,2,3,4,5,6,7,8(假定左分枝和右分枝中優先選擇左分枝)。
(2)從stack中訪問棧頂的點;
(3)找出與此點鄰接的且尚未遍歷的點,進行標記,然後放入stack中,依次進行;
(4)如果此點沒有尚未遍歷的鄰接點,則將此點從stack中彈出,再按照(3)依次進行;
(5)直到遍歷完整個樹,stack里的元素都將彈出,最後棧為空,DFS遍歷完成。
二、廣度優先搜索
廣度優先搜索(也稱寬度優先搜索,縮寫BFS,以下採用廣度來描述)是連通圖的一種遍歷演算法這一演算法也是很多重要的圖的演算法的原型。Dijkstra單源最短路徑演算法和Prim最小生成樹演算法都採用了和寬度優先搜索類似的思想。其別名又叫BFS,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜索整張圖,直到找到結果為止。基本過程,BFS是從根節點開始,沿著樹(圖)的寬度遍歷樹(圖)的節點。如果所有節點均被訪問,則演算法中止。一般用隊列數據結構來輔助實現BFS演算法。
基本步奏
(1)給出一連通圖,如圖,初始化全是白色(未訪問);
(2)搜索起點V1(灰色);
(3)已搜索V1(黑色),即將搜索V2,V3,V4(標灰);
(4)對V2,V3,V4重復以上操作;
(5)直到終點V7被染灰,終止;
(6)最短路徑為V1,V4,V7.
2. 百度搜索引擎的演算法是怎樣的
衡量網頁質量的維度
網路搜索引擎在衡量網頁質量時,會從以下三個維度綜合考慮給出一個質量打分。下面會一一介紹這些影響網頁質量判斷的維度特徵:
• 內容質量
• 瀏覽體驗
• 可訪問性
一個訪問流暢,內容質量高且瀏覽體驗好的網頁具有較高的質量;反之,任何一個維度出現問題,都會影響網頁的整體質量。下面我們具體介紹下這三個維度。
衡量網頁質量的維度——內容質量
網頁主體內容是網頁的價值所在,是滿足用戶需求的前提基礎。網路搜索引擎評價網頁內容質量主要看其主體內容的好壞,以及主體內容是否可以讓用戶滿意。 不同類型網頁的主體內容不同,網路搜索引擎判斷不同網頁的內容價值時,需要關注的點也有區別,如:
• 首頁:導航鏈接和推薦內容是否清晰、有效。
• 文章頁:能否提供清晰完整的內容,圖文並茂更佳。
• 商品頁:是否提供了完整真實的商品信息和有效的購買入口。
• 問答頁:是否提供了有參考價值的答案。
• 下載頁:是否提供下載入口,是否有許可權限制,資源是否有效。
• 文檔頁:是否可供用戶閱讀,是否有許可權限制。
• 搜索結果頁:搜索出來的結果是否與標題相關。
網路搜索引擎考量網頁內容質量的維度非常多,最為重要的是:成本;內容完整;信息真實有效以及安全。下面我們通過舉例來感受一下網路搜索引擎是如何對網頁的內容質量進行分類的,請站長對比自己站點的頁面,站在搜索引擎和用戶的角度為自己打分:
1、內容質量好:
網路搜索引擎認為內容質量好的網頁,花費了較多時間和精力編輯,傾注了編者的經驗和專業知識;內容清晰、完整且豐富;資源有效且優質;信息真實有效;安全無毒;不含任何作弊行為和意圖,對用戶有較強的正收益。對這部分網頁,網路搜索引擎會提高其展現在用戶面前的機率。例如:
• 專業醫療機構發布的內容豐富的醫療專題頁面;
• 資深工程師發布的完整解決某個技術問題的專業文章;
• 專業視頻網站上,播放清晰流暢的正版電影或影視全集頁面;
• 知名B2C網站上,一個完整有效的商品購買頁;
• 權威新聞站原創或經過編輯整理的熱點新聞報道;
• 經過網友認真編輯,內容豐富的詞條;
• 問答網站內,回答的內容可以完美解決提問者的問題。
實例參考:
示例
內容質量
說明
case 3.1.1-1
好
專業醫療網站發布的豐富醫療專題頁面
case 3.1.1-2
好
資深工程師發布的完整解決某個技術問題的專業文章
case 3.1.1-3
好
專業視頻網站上,播放清晰流暢的正版影視全集頁面
case 3.1.1-4
好
京東的一個完整有效的商品購買頁
case 3.1.1-5
好
權威新聞站原創的熱點新聞的報道
case 3.1.1-6
好
經過網友認真編輯,內容豐富的網路詞條
case3.1.1-7
好
網路知道上,完美解決用戶問題的問答頁
2、內容質量中:
內容質量中等的網頁往往能滿足用戶需求,但未花費較多時間和精力進行製作編輯,不能體現出編者的經驗和專業知識;內容完整但並不豐富;資源有效但質量欠佳;信息雖真實有效但屬採集得來;安全無毒;不含作弊行為和意圖。在互聯網中,中等質量網頁其實是一個比較大的數量集合,種類面貌也繁雜多樣,網路搜索引擎在評價這類網頁時往往還要考慮其它非常多因素。在這里,我們僅部分舉例來讓各位感受一下:
• 論壇類網站里一個普通的帖子;
• 一個普通的問答網頁;
• 沒有進行任何編輯,直接轉載其它網站的新聞;
• 無版權信息的普通電影播放頁
• 採集知名小說網站的盜版小說頁。
實例參考:
示例
內容質量
說明
case 3.1.2-1
中
網易直接轉載了中國新聞網的一篇新聞。
case 3.1.2-2
中
文庫上網友上傳的「國慶放假安排」新聞
case 3.1.2-3
中
採集起點小說網的盜版小說站
case 3.1.2-4
中
網路貼吧里一個普通的帖子
3、內容質量差:
網路搜索引擎認為主體內容信息量較少,或無有效信息、信息失效過期的都屬於內容質量差網頁,對用戶沒有什麼實質性的幫助,應該減少其展現的機會。同時,如果一個網站內該類網頁的佔比過大,也會影響網路搜索引擎對站點的評級,尤其是UGC網站、電商網站、黃頁網站要尤其重視對過期、失效網頁的管理。例如:
• 已下架的商品頁,或已過期的團購頁;
• 已過有效期的招聘、交易頁面;
• 資源已失效,如視頻已刪除、軟體下載後無法使用等。
4、沒有內容質量可言:
沒有內容質量可言的網頁指那些製作成本很低,粗製濫造;從別處採集來的內容未經最起碼的編輯整理即放置線上;掛木馬等病毒;含有作弊行為或意圖;完全不能滿足用戶需求,甚至含有欺騙內容的網頁。例如:
• 內容空短,有很少量的內容,卻不能支撐頁面的主要意圖;
• 問答頁有問無答,或回答完全不能解決問題;
• 站內搜索結果頁,但沒有給出相關信息
除上述網頁外,欺騙用戶和搜索引擎的網頁在無內容質量可言集合里占很高比例。網路搜索引擎對作弊網頁的定義是:不以滿足用戶需求為目的,通過不正當手段欺騙用戶和搜索引擎從而獲利的網頁。目前互聯網上這部分網頁還屬少數,但作弊網頁的價值是負向的,對用戶的傷害非常大,對這類網頁,搜索引擎持堅決打擊態度。
衡量網頁質量的維度——瀏覽體驗
不同質量的網頁帶給用戶的瀏覽體驗會有很大差距,一個優質的網頁給用戶的瀏覽體驗應該是正向的。用戶希望看到干凈、易閱讀的網頁,排版混亂、廣告過多會影響用戶對網頁主體內容的獲取。在網路搜索引擎網頁質量體系中,用戶對網頁主體內容的獲取成本與瀏覽體驗呈反比,即獲取成本越高,瀏覽體驗越低。面對內容質量相近的網頁,瀏覽體驗佳者更容易獲得更高的排位,而對於瀏覽體驗差的網頁,網路搜索引擎會視情況降低其展現的機率甚至拒絕收錄。
影響用戶瀏覽體驗好壞的因素很多,目前網路搜索引擎主要從內容排版、廣告影響兩方面對網頁進行考量:
內容排版:用戶進入網頁第一眼看到的就是內容排版,排版決定了用戶對網頁的第一印象,也決定了用戶對內容獲取的成本。
廣告影響:網路搜索引擎理解網站的生存發展需要資金支持,對網頁上放置正當廣告持支持態度。網頁應該以滿足用戶需求為主旨,最佳狀態即「主體內容與廣告一起滿足用戶需求,內容為主,廣告為輔」,而不應讓廣告成為網頁主體。
下面我們通過舉例來感受一下網路搜索引擎是如何對網頁的瀏覽體驗進行分類的,站長可以據此對比檢驗自己站點的瀏覽體驗如何:
1、瀏覽體驗好:
頁面布局合理,用戶獲取主體內容成本低,一般具有以下特徵:
• 排版合理,版式美觀,易於閱讀和瀏覽;
• 用戶需要的內容占據網頁最重要位置;
• 能夠通過頁面標簽或頁面布局十分清楚地區分出哪些是廣告;
• 廣告不搶佔主體內容位置,不阻礙用戶對主要內容的獲取;
實例參考:
示例
瀏覽體驗
說明
case 3.2.1-1
好
招聘、房產等網站首頁也有很多廣告,但都是招聘相關的,瀏覽體驗是ok的。
case 3.2.1-2
好
文章頁,頁面布局合理,無廣告,排版好,結構合理
case 3.2.1-3
好
游戲首頁,排版美觀,布局合理,無廣告,瀏覽體驗優
2、瀏覽體驗差:
頁面布局和廣告放置影響了用戶對主體內容的獲取,提高了用戶獲取信息的成本,令用戶反感。包括但不僅限於以下情況:
• 正文內容不換行或不分段,用戶閱讀困難;
• 字體和背景顏色相近,內容辨別困難;
• 頁面布局不合理,網頁首屏看不到任何有價值的主體內容;
• 廣告遮擋主體內容;或者在通用解析度下,首屏都是廣告,看不到主體內容;
• 彈窗廣告過多;
• 影響閱讀的浮動廣告過多
• 點擊鏈接時,出現預期之外的彈窗;
• 廣告與內容混淆,不易區分;
衡量網頁質量的維度——可訪問性
用戶希望快速地從搜索引擎獲取到需要的信息,網路搜索引擎盡可能為用戶提供能一次性直接獲取所有信息的網頁結果。網路搜索引擎認為不能直接獲取到主體內容的網頁對用戶是不友好的,會視情況調整其展現機率。
網路搜索引擎會從正常打開、許可權限制、有效性三方面判斷網頁的可訪問性,對於可以正常訪問的網頁,可以參與正常排序;對於有許可權限制的網頁,再通過其它維度對其進行觀察;對於失效網頁,會降權其展現機制甚至從資料庫中刪除。
1、可正常訪問的網頁
無許可權限制,能直接訪問所有主體內容的網頁。
2、有許可權限制的網頁
此類網頁分為兩種:打開許可權和資源獲取許可權
1)打開許可權:指打開網頁都需要登錄許可權,沒有許可權完全無法看到具體內容,普通用戶無法獲取或獲取成本很高,網路搜索引擎會降低其展現機率。不包括以登錄為主要功能的網頁。
2)資源獲取許可權:指獲取網頁主要內容,如文檔、軟體、視頻等,需要許可權或者需要安裝插件才能獲得完整內容。此時會分三種情況:
• 提供優質、正版內容的網站,由於內容建設成本很高,盡管查看全文或下載時需要許可權或安裝插件,但屬於用戶預期之內,網路搜索引擎也不認為許可權行為對用戶造成傷害,給予與正常可訪問頁面相同的對待。
• 對於一些非優質、非正版的資源,來自於用戶轉載甚至機器採集,本身成本較低,內容也不獨特,用戶獲取資源還有許可權限制——需要用戶注冊登錄或者付費查看,網路搜索引擎會根據具體情況決定是否調整其展現。
• 還有一些視頻、下載資源頁,也許自身資源質量並不差,但需要安裝非常冷門的插件才能正常訪問,比如要求安裝「xx大片播放器」,網路搜索引擎會懷疑其有惡意傾向。
實例參考:
示例
可訪問性
說明
case 3.2-1
好
CNKI上的一篇論文,收費才能下載,但有版權,瀏覽體驗好
case 3.2-2
好
優酷上一部新電影,需要付費才能觀看,瀏覽體驗好。
case 3.2-3
中
內容是來,但是需要登錄才能看更多
case 3.2-4
差
入黨申請書,本身就是轉載的,網上到處都是,但這個頁面仍然要求收費才能下載。
3、失效網頁
往往指死鏈和主體資源失效的網頁。網路搜索引擎認為這部分網頁無法提供有價值信息,如果站點中此類網頁過多,也會影響網路搜索引擎對其的收錄和評級。建議站長對此類網頁進行相應設置,並及時登錄網路站長平台,使用死鏈提交工具告知網路搜索引擎。
失效網頁包括但不僅限於:
• 404、403、503等網頁;
• 程序代碼報錯網頁;
• 打開後提示內容被刪除,或因內容已不存在跳轉到首頁的網頁;
• 被刪除內容的論壇帖子,被刪除的視頻頁面(多出現在UGC站點)
具體請參閱《網路搜索引擎網頁質量白皮書》,望採納!
3. 棋類游戲的演算法有哪些
棋類游戲的演算法有哪些
棋類游戲通常包含三大要素:棋盤、棋子和游戲規則,其中游戲規則又包括勝負判定規則、落子的規則以及游戲的基本策略。下面我來給大家講講各類棋類游戲的演算法。
除了棋盤和棋子的建模,棋類游戲最重要的部分就是AI演算法的設計。目前棋類游戲的AI基本上就是帶啟發的搜索演算法,那麼常用的搜索演算法有哪些呢?
1. 博弈與博弈樹
博弈可以理解為有限參與者進行有限策略選擇的競爭性活動,比如下棋、打牌、競技、戰爭等。根據參與者種類和策略選擇的方式可以將博弈分成很多種,比如“二人零和、全信息、非偶然”博弈,也就是我們常說的零和博弈(Zero-sum Game)。所謂“零和”,就是有贏必有輸,不存在雙贏的結果。所謂“全信息”,是指參與博弈的雙方進行決策時能夠了解的信息是公開和透明的,不存在信息不對稱的情況。比如棋類游戲的棋盤和棋子狀態是公開的,下棋的雙方都可以看到當前所有棋子的位置,但是很多牌類游戲則不滿足全信息的條件,因為牌類游戲都不會公開自己手中的牌,也看不到對手手中的牌。所謂的“非偶然”,是指參與博弈的雙方的決策都是“理智”的行為,不存在失誤和碰運氣的情況。
在博弈過程中,任何一方都希望自己取得勝利,當某一方當前有多個行動方案可供選擇時,他總是挑選對自己最為有利同時對對方最為不利的那個行動方案。當然,博弈的另一方也會從多個行動方案中選擇一個對自己最有利的方案進行對抗。參與博弈的雙方在對抗或博弈的過程中會遇到各種狀態和移動(也可能是棋子落子)的選擇,博弈雙方交替選擇,每一次選擇都會產生一個新的棋局狀態。
假設兩個棋手(可能是兩個人,也可能是兩台計算機)MAX和MIN正在一個棋盤上進行博弈。當MAX做選擇時,主動權在MAX手中,MAX可以從多個可選決策方案中任選一個行動,一旦MAX選定某個行動方案後,主動權就轉移到了MIN手中。MIN也會有若干個可選決策方案,MIN可能會選擇任何一個方案行動,因此MAX必須對做好應對MIN的每一種選擇。如果把棋盤抽象為狀態,則MAX每選擇一個決策方案就會觸發產生一個新狀態,MIN也同樣,最終這些狀態就會形成一個狀態樹,這個附加了MAX和MIN的決策過程信息的狀態樹就是博弈樹(Game Tree)。
2. 極大極小值搜索演算法
極大極小值(Min-Max)搜索演算法是各種博弈樹搜索演算法中最基礎的搜索演算法。假如MAX和MIN兩個人在下棋,MAX會對所有自己可能的落子後產生的局面進行評估,選擇評估值最大的局面作為自己落子的選擇。這時候就該MIN落子,MIN當然也會選擇對自己最有利的局面,這就是雙方的博弈,即總是選擇最小化對手的'最大利益(令對手的最大利益最小化)的落子方法。作為一種博弈搜索演算法,極大極小值搜索演算法的名字就由此而來。
3. 負極大值搜索演算法
博弈樹的搜索是一個遞歸的過程,極大極小值演算法在遞歸搜索的過程中需要在每一步區分當前評估的是極大值節點還是極小值節點。1975年Knuth和Moore提出了一種消除MAX節點和MIN節點區別的簡化的極大極小值演算法,稱為負極大值演算法Negamax。該演算法的理論基礎是:
max(a,b) = -min(-a, -b)
簡單地將遞歸函數MiniMax()返回值取負再返回,就可以將所有的MIN 節點都轉化為MAX節點,對每個節點的搜索都嘗試讓節點值最大,這樣就將每一步遞歸搜索過程都統一起來。
4. “α-β”剪枝演算法
有很多資料將“α-β”剪枝演算法稱為“α-β”搜索演算法,實際上,它不是一種獨立的搜索演算法,而是一種嫁接在極大極小值演算法和負極大值演算法上的一種優化演算法。“α-β”剪枝演算法維護了一個搜索的極大極小值窗口:[α,β]。其中α表示在搜索進行到當前狀態時,博弈的MAX一方所追尋的最大值中最小的那個值(也就是MAX的最壞的情況)。在每一步的搜索中,如果MAX所獲得的極大值中最小的那個值比α大,則更新α值(用這個最小值代替α),也就是提高α這個下限。
而β表示在搜索進行到當前狀態時,博弈的MIN一方的最小值中最大的那個值(也就是MIN的最壞的情況)。在每一步的搜索中,如果MIN所獲得的極小值中最大的那個值比β小,則更新β值(用這個最大值代替β),也就是降低β這個上限。當某個節點的α≥β時,說明該節點的所有子節點的評估值既不會對MAX更有利,也不會對MIN更有利,也就是對MAX和MIN的選擇不會產生任何影響,因此就沒有必要再搜索這個節點及其所有子節點了。
5. 估值函數
對於很多啟發式搜索演算法,其“智力”的高低基本上是由估值函數(評估函數)所決定,棋類游戲的博弈樹搜索演算法也不例外。
估值函數的作用是把一個棋局量化成一個可直接比較的數字,這個數字在一定程度上能反映取勝的概率。棋局的量化需要考慮很多因素,量化結果是這些因素按照各種權重組合的結果。這些因素通常包括棋子的戰力(棋力)、雙方棋子佔領的空間、落子的機動性、威脅性(能吃掉對方的棋子)、形和勢等。
6. 置換表與哈希函數
置換表(transposition table)也是各種啟發式搜索演算法中常用的輔助演算法,它是一種以空間換時間的策略,使用置換表的目的就是提高搜索效率。一般情況下,置換表中的每一項代表者一個棋局中最好的落子方法,直接查找置換表獲得這個落子方法能避免耗時的重復搜索,這就是使用置換表能大幅提高搜索效率的原理。
使用置換表最大的問題是置換表的組織和查找的效率。一般來說,置換表越大,查找的命中率就越高。但這個關系不是絕對的,當置換表大小達到一定規模後,不僅不會再提高命中率,反而會因為耗時的查找操作影響演算法的效率。所以置換表不是越大越好,需要根據計算機的性能以及搜索的深度選擇一個合適的大小。此外,為了查找操作更高效,通常都會用可直接訪問的哈希表方式組織置換表,哈希函數的性能就成為影響置換表性能的重要因素。棋類游戲普遍採用Zobrist哈希演算法。
4. 百度和Google的搜索演算法,技術有何差異
網路是中國的,谷歌是美國的。各有側重不能不可比較。技術都是一樣的側重不同罷了。網路側重的是中國民俗,谷歌是側重美國民俗。因為國情國法不同所以無可能比較量級。【搜索引擎技術是硬體加軟體。硬體是實際使用的機器,軟體是程序編程】搜索產品搜索引擎產品其實包括很多種類,並不限於我們最熟悉的全網搜索引擎。簡單分類羅列一下:*全網搜索:包括市場份額最高的幾大搜索引擎巨頭,Google,Yahoo,Bing。*中文搜索:在中文搜索市場中,網路一家獨大,其它幾家如搜狗、搜搜、有道,市場份額相對還比較小。*垂直搜索:在各自的垂直領域成為搜索入口的,購物的淘寶,美食的大眾點評,旅遊的去哪兒,等等。*問答搜索:專注於為問句式提供有效的答案,比如Ask.com;其它的如問答社區像Quora和國內的知乎,應該也會往這方面發展。*知識搜索:典型代表就是WolframAlpha,區別於提供搜索結果列表,它會針對查詢提供更詳細的整合信息。*雲搜索平台:為其它產品和應用提供搜索服務託管平台(SaaS或是PaaS),Amazon剛剛推出它的CloudSearch,IndexTank在被Linkedin收購之前也是做這項服務。*其它:比始DuckDuckGo,主打隱私保護,也有部分用戶買帳。各種搜索產品在各自領域都需要解決特定的技術和業務問題,所以也可以建立相對通用搜索的優勢,來得到自己的市場和用戶。搜索技術搜索引擎所涉及和涵蓋的技術范圍非常廣,涉及到了系統架構和演算法設計等許多方面。可以說由於搜索引擎的出現,把互聯網產品的技術水平提高到了一個新的高度;搜索引擎無論是在數據和系統規模,還是演算法技術的研究應用深度上,都遠超之前的簡單互聯網產品。列舉一些搜索引擎所涉及到的技術點:*爬蟲(Crawling)*索引結構(InvertedIndex)*檢索模型(VSM&TF-IDF)*搜索排序(RelevanceRanking&Evaluation)*鏈接分析(LinkAnalysis)*分類(Document&QueryClassification)*自然語言處理(NLP:Tokenization,Lemmatization,POSTagging,NER,etc.)*分布式系統(DistributedProcessing&Storage)*等等雖然搜索引擎涉及的技術方方面面,但歸結起來最關鍵的幾點在於:*系統:大規模分布式系統,支撐大規模的數據處理容量和在線查詢負載*數據:數據處理和挖掘能力*演算法:搜索相關性排序,查詢分析,分類,等等系統搜索引擎系統是一個由許多模塊組成的復雜系統。核心模塊通常包括:爬蟲,索引,檢索,排序。除了必需的核心模塊之外,通常還需要一些支持輔助模塊,常見的有鏈接分析,去重,反垃圾,查詢分析,等等。[附圖:搜索系統架構概念模型]*爬蟲從互聯網爬取原始網頁數據,存儲於文檔伺服器。*文檔伺服器存儲原始網頁數據,通宵是分布式Key-Value資料庫,能根據URL/UID快速獲取網頁內容。*索引讀取原始網頁數據,解析網頁,抽取有效欄位,生成索引數據。索引數據的生成方式通常是增量的,分塊/分片的,並會進行索引合並、優化和刪除。生成的索引數據通常包括:字典數據,倒排表,正排表,文檔屬性等。生成的索引存儲於索引伺服器。*索引伺服器存儲索引數據,主要是倒排表。通常是分塊、分片存儲,並支持增量更新和刪除。數據內容量非常大時,還根據類別、主題、時間、網頁質量劃分數據分區和分布,更好地服務在線查詢。*檢索讀取倒排表索引,響應前端查詢請求,返回相關文檔列表數據。*排序對檢索器返回的文檔列表進行排序,基於文檔和查詢的相關性、文檔的鏈接權重等屬性。*鏈接分析收集各網頁的鏈接數據和錨文本(AnchorText),以此計算各網頁鏈接評分,最終會作為網頁屬性參與返回結果排序。*去重提取各網頁的相關特徵屬性,計算相似網頁組,提供離線索引和在線查詢的去重服務。*反垃圾收集各網頁和網站歷史信息,提取垃圾網頁特徵,從而對在線索引中的網頁進行判定,去除垃圾網頁。*查詢分析分析用戶查詢,生成結構化查詢請求,指派到相應的類別、主題數據伺服器進行查詢。*頁面描述/摘要為檢索和排序完成的網頁列表提供相應的描述和摘要。*前端接受用戶請求,分發至相應伺服器,返回查詢結果[附圖:爬蟲系統架構]爬蟲系統也是由多個模塊構成:*URLScheler存儲和高度待爬取的網頁地址。*Downloader根據指定的網頁列表爬取網頁內容,存儲至文檔伺服器。*Processer對網頁內容進行簡單處理,提取一些原始屬性,為爬取的後續操作服務。*TrafficController爬取流量控制,防止對目標網站在短時間內造成過大負載[附圖:搜索系統架構實例:Google這是Google早期的一張系統架構圖,可以看出Google系統的各模塊基本和前面概念模型一致。所以一個完整的全網搜索系統的大致系統架構是類似的,區別和競爭力體現在細節實現和優化上。數據除了搜索引擎系統提供了系統支撐外,搜索結果質量很大程度上依賴於源數據的數量和質量,以及數據處理的能力。全網數據的主要來源通常是從互聯網上進行自動爬取,從一些高質量的種子站點開始,並沿網頁鏈接不斷,收集巨量的網頁數據;這通常能達到數據在數量的要求,但也不可避免混入了大量的低質量網頁。除了自動爬取來的數據外,搜索引擎的數據來源還可以來自人工收集、合作夥伴提供、第三方數據源和API、以及購買;這些來源通常會有更好的質量保證,但在數量規模和覆蓋率上會相對少一些,可以和爬取的數據形成有效的互補。收集到足量的原始數據後,需要進行各種數據處理操作,把原始數據轉換成在線檢索需要的數據。這個過程通常包括:網頁分析,數據抽取,文本處理和分詞,索引及合並;最終生成的數據會包括:詞典,倒排表,正排表,文檔權重和各種屬性。最終生成的數據要布署上相應的在線檢索伺服器上,通常會進行數據分區和分片布署,數據內容更豐富時還可能根據內容分類和主題進行分別布署,比如新聞時效類的網頁可能就會獨立布署,針對性地響應時效類的查詢[附圖:索引數據:字典、倒排表、正排表]這張圖來源於Google早期的索引數據結構,包括詞典、倒排表、正排表。演算法有了相當數量的高質量數據之後,搜索結果的質量改進就取決於搜索演算法的准確性上。現在的搜索引擎通常通過向量空間模型(VSM=VectorSpaceModel)來計算查詢和各文檔之間的文本相似性;即把查詢或文檔抽象成一個詞向量,然後再計算向量在向量空間中的夾角,可以用餘弦公式得出,作為文本相似度的度量值。在基本的向量空間模型基礎上通常會進一步加入詞的權重值進行改進,通過經典的TF-IDF公式得出,即詞頻(TF)乘上逆文檔頻率(IDF);其中TF=TermFrequency,即該詞在所在文檔中的出現次數;IDF=InvertDocumentFrequency,即包含該詞的文檔數除以總文檔數,再取反,通常還會取對數來降維,這個值值越大表示這個詞越能代表文檔特徵。除了通過向量空間模型得出的文本匹配評分外,每個文檔還會有自己本身的質量評分,通常由網頁鏈接數據計算得出,代表了該網頁本身的流行度權重。最終的評分會以文本匹配的查詢時動態評分和文檔靜態評分為基礎計算得出;搜索引擎的評分計算都會考慮很多因素,但這兩項通常是評分計算的基礎。有了確定的排序演算法後,另一個重要的任務就是評估搜索結果的質量。由於搜索結果的好與壞是一個比較主觀的過程,所以進行定量的評估並不容易。常見的做法是通過事先選定一批查詢,通過人工評估或是預先設定標准值的方式,逐個評估每個設定查詢搜索結果,最終得到一個統計結果,作為搜索演算法的評估度量。另一類做法是直接通過線上的用戶點擊數據來統計評估搜索結果質量,或是通過A/B測試來比較兩種排序演算法的點擊效果來衡量。合理而有效的評估方法,是搜索演算法可以不斷改進和比較的前提。查詢分析是另一個對搜索結果影響很大的方面,主要任務是把用戶的查詢文本轉換成內部的結構化的搜索請求。涉及的處理可能包括基本的分詞處理,專有名詞的識別和提取,或是查詢模式的識別,或是查詢分類的識別。這些處理的准確性將能極大地改進搜索請求的方式,進一步影響搜索結果的相關性和質量。開源方案近年來在搜索公司內部搜索系統和技術的改進和發展的同時,一批開源的搜索系統和解決方案也逐漸發展和成熟起來。當然開源系統在功能全面性、復雜性和規模上都不能與專業的搜索引擎系統相比,但對於中小企業的搜索應用來說應該已經能很好地滿足需求,而且也成功應用到了一些大規模的產品系統中(比如Twitter的搜索就使用和改進了Lucene)。現在比較常見的開源搜索解決方案有:*LuceneLucene自然是現在最流行,使用度最高的搜索開源方案。它用Java開發,以索引和檢索庫的方式提供,可以很容易地嵌入需要的應用中。*Solr&SolrCloudSolr是Lucene的子項目,同屬Apache軟體基金會項目;它是基於Lucene之上實的一個完整的搜索服務應用,提供了大量的搜索定製功能,可以滿足大部分的搜索產品需求。SolrCloud是Solr為了加強其分布式服務能力而開發的功能,目前還在開發階段,將在Solr4.0發布。*Zoie&Sensei(Linkedin)Zoie是Linkedin公司在Lucene基礎上實現的准實時索引庫,通過加入額外的內存索引,來達到准實時索引的效果。Sensei是Linkedin公司在Zoie基礎上實現的分布式搜索服務,通過索引分區來實現分布式搜索服務。*ElasticSearchElasticSearch也是剛推出不久的一個基於Lucene實現的分布式搜索服務,據說在分布式支持和易用性上都有不錯的表現。因為還比較年輕,真實的應用應該還不多,需要觀察。因為也是基於Lucene的分布式開源搜索框架,基本上會與SolrCloud和Sensei形成正面競爭關系。*其它開源產品除了Lucene家族以外,還有一些其它的開源產品,比如Sphinx和Xapian,也有不少的應用;但近年來的更新頻率和社區活躍度都不太能和Lucene系的產品相比。*託管平台除了開源產品外,現在還出現了一些基於雲計算和雲服務的搜索服務,比如Amazon新近推了的CloudSearch,還有更早一些的IndexTank(已被Linkedin收購)。這類服務無需自己布置搜索系統,直接使用在線服務,按需付費,所以也將是開源產品的替代方案和競爭對手。附幾張上面提到的開源系統的概念模型和架構圖:[附圖:Lucene概念模型][附圖:Lucene工作流程][附圖:Sensei系統架構][附圖:SolrCloud系統架構]現狀與未來:傳統的搜索引擎經過了十幾年的發展,目前在技術和產品上都已走向逐漸穩定和成熟,通用搜索的市場也基本進入飽和,不像早些年一直呈現高增長率。同時,在各個垂直領域,也出現了很多和產品結合的很好的垂直搜索產品,比如淘寶的購物搜索,大眾點評的美食搜索,去哪兒和酷訊的旅遊搜索等,也都在各自領域占據了相當大的市場,成為除了通用搜索引擎之外的重要的用戶入口。在開源領域,各種開源產品和解決方案也逐漸發展成熟,通用搜索技術不再為大公司所專有,中小企業能夠以較低的成本實現自己的搜索應用。現在搜索引擎產品之間的競爭的在數據、應用方式和產品形態上,在系統架構和基本演算法上區分並不大。搜索引擎在未來發展上,一是搜索將不僅僅以獨立產品的形式出現,的會作為搜索功能整合到的產品和應用中。在產品形態上,基於傳統的搜索引擎,會演化出像推薦引擎,知識引擎,決策引擎等形式的產品,更好地滿足和服務用戶需求。而搜索引擎所涉及和發展起來的各種技術,會更廣泛地應用到各種基它產品上,比如自然語言處理,推薦和廣告,數據挖掘,等等。總之,搜索引擎對互聯網技術和產品帶來的影響是巨大的,未來也仍將有很大的發展和應用空間。