第43章 搜索引擎
搜索引擎,顧名思義,便是一種用于搜索信息而產(chǎn)生的工具。一般解釋而言,便是通過用戶的需求,和一定的算法,將用戶輸入的關(guān)鍵詞與互聯(lián)網(wǎng)上現(xiàn)存的信息進(jìn)行匹配,并按照相關(guān)度和時(shí)間順序,將符合要求的信息羅列在用戶的眼前。
搜索引擎這門生意講究的是個(gè)先來后到。如果能在最早的時(shí)候?qū)⒅搲途W(wǎng)站的內(nèi)容全部爬取,那就會(huì)在用戶占有率上占盡優(yōu)勢(shì)。
要知道在這個(gè)時(shí)間點(diǎn),日后馳名全球的尋他公司和布谷公司還在娘胎里,呀唬公司的搜索引擎雖然已經(jīng)誕生,但其底層技術(shù)依舊是依靠人工存放網(wǎng)站目錄,可謂是效率極其低下。
現(xiàn)在已經(jīng)有互聯(lián)網(wǎng)信息爆炸的趨勢(shì)了,隨著信息越來越多,人工處理流程必將被淘汰,而王向中設(shè)想的,則是搶在市場(chǎng)最前列,將新一代的搜索引擎提前面世。
實(shí)際上做一個(gè)搜索引擎并沒有看上去那么輕松。首先是代碼問題,這個(gè)年代網(wǎng)頁(yè)技術(shù)還停留在Web1.0(互聯(lián)網(wǎng)1.0)的時(shí)代,先暫且不提Ajax(Asynchronous Javascript And XML,異步JavaScript和XML)這種動(dòng)態(tài)頁(yè)面刷新機(jī)制,就連JavaScript(一種Web頁(yè)面腳本語(yǔ)言)都還尚未出現(xiàn)。
還好Windows公司相當(dāng)強(qiáng)大,早在1996年發(fā)布了ASP1.0(Active Server Pages,動(dòng)態(tài)服務(wù)器頁(yè)面),這也讓王向中不必苦哈哈地用大量C語(yǔ)言進(jìn)行后端代碼編寫工作。
接下來就是數(shù)據(jù)的爬取和存儲(chǔ)問題。這話雖然聽起來很高端,但實(shí)際上也就是將數(shù)據(jù)從別的網(wǎng)站上摘下來,進(jìn)行索引和關(guān)鍵詞分配的簡(jiǎn)單加工后存儲(chǔ)的過程。
這個(gè)時(shí)候Python語(yǔ)言尚還叫ABC語(yǔ)言,很顯然在這個(gè)年代使用這個(gè)失敗的產(chǎn)品是不太合適的,使用更加成熟的C++也許可以解決一些問題。
將爬蟲模型簡(jiǎn)單地鋪開來講,最基礎(chǔ)的爬蟲,便是通過程序直接訪問網(wǎng)頁(yè)的源代碼,通過正則表達(dá)式匹配出網(wǎng)頁(yè)的標(biāo)題和其具體內(nèi)容,再接著分析網(wǎng)頁(yè)內(nèi)的超鏈接所指向的頁(yè)面,逐步將整個(gè)網(wǎng)站的內(nèi)容收入囊中。
再接下來便是數(shù)據(jù)的存儲(chǔ)問題。MySQL(一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))可以完美地代替文本文檔進(jìn)行數(shù)據(jù)存取,因?yàn)樗幸豁?xiàng)對(duì)于搜索引擎而言重要的功能——索引。
索引可以給一條數(shù)據(jù)給予定義。舉個(gè)最簡(jiǎn)單的比方,為了節(jié)省空間,圖書館的書一般是縱向擺放,而在每本書的側(cè)面上,都寫有書名和作者姓名。
這個(gè)書名和作者姓名,就是一本書的“索引”,當(dāng)你想要找一本書的時(shí)候,顯然不可能將每本書都打開細(xì)細(xì)查閱一番,這無(wú)疑是在浪費(fèi)時(shí)間。而通過書名和作者名,你可以輕松地找到自己想要的那本書。
假設(shè)一本書是一條數(shù)據(jù),那么通過索引功能,便可以輕松地將它從數(shù)據(jù)庫(kù)中調(diào)取出來,而不必辛苦地逐行逐字分析書本的內(nèi)容。
至于數(shù)據(jù)庫(kù)訪問優(yōu)化,還是屬于暫時(shí)不必要考慮的問題。這個(gè)時(shí)代,互聯(lián)網(wǎng)上存在的網(wǎng)站還不算太多,不到1TB的硬盤便可以解決問題。
剩下的域名購(gòu)買、網(wǎng)站報(bào)備申請(qǐng)等環(huán)節(jié),則就是行政工作了,只要抽個(gè)時(shí)間便可以將它們?nèi)扛愣ā?p> 如此估算下來,王向中還需要一臺(tái)服務(wù)器,一個(gè)小機(jī)房用于存放設(shè)備,以及網(wǎng)絡(luò)費(fèi)用成本。
按照目前王向中的賺錢速度,想要快速攢到所需要的錢,還需要一些時(shí)日。
不過現(xiàn)在他已經(jīng)可以開始著手代碼的框架建立了,盡管在當(dāng)年那個(gè)世界,代碼這一步是最難的事情,然而在王向中身上,代碼是最簡(jiǎn)單的事情……
但凡是不用掏錢的事情,都是最簡(jiǎn)單的事情。
短短三天內(nèi),電信公司便派了人來,將電話線給拉好了,與此同時(shí),王向中也向蔣紅月借出重金,咬緊牙關(guān)買了一部固定電話。
盡管Windows95在這個(gè)年代是人類頂級(jí)智慧成果之一,但王向中還是愣了好一會(huì),才逐漸熟悉它的操作方式。
在他這個(gè)現(xiàn)代人眼里,這個(gè)所謂最先進(jìn)的系統(tǒng),等同于是反人類的設(shè)計(jì)功能也不為過。
雖然王向中懂編程,懂設(shè)計(jì),但ASP1.0和最初代的C++還是讓他遇到了不小的困難。不同于日后隱隱有大一統(tǒng)趨勢(shì)的編程語(yǔ)言,此時(shí)它們的編碼結(jié)構(gòu)和習(xí)慣簡(jiǎn)直是天差地別,對(duì)比未來的版本而言,更是缺少了不少庫(kù)和函數(shù)。
在調(diào)試好編譯環(huán)境后,就算是王向中,也不得不照著書一點(diǎn)一點(diǎn)地再啃代碼。如果按照日后那種習(xí)慣來寫代碼,恐怕每三行就會(huì)出現(xiàn)一個(gè)報(bào)錯(cuò)。
正當(dāng)他對(duì)著電腦屏幕冥思苦想之時(shí),林建這個(gè)小子,卻悄悄溜達(dá)到他背后開始觀察起來。
“你在干什么?”林建一臉好奇地望著屏幕中的英文代碼,出聲問道。
此時(shí)王向中也有些疲憊,于是也重重地靠在了椅背上,不斷地揉搓著太陽(yáng)穴:“我在編程,寫代碼,做軟件。”
“我看這個(gè)挺好玩的?!绷纸▽㈦p手搭在王向中肩頭上,指著屏幕上的一行代碼:“這個(gè)地方是不是有問題?”
王向中聞言,也是自覺有些好笑地?fù)u了搖頭,笑道:“怎么,你也能看出問題?”
“沒有,我就是有一種感覺。”林建小臉滿是認(rèn)真之色,絲毫沒有半點(diǎn)玩笑的意味。
聽到這話,王向中也是有一絲狐疑地仔細(xì)打量了一下這一行的代碼。雖然他天天都能在店里見到林建這個(gè)小子,但兩人交流極少,很多時(shí)候也只是象征性地問好。
不過通過他的觀察,確實(shí)發(fā)現(xiàn)林建這個(gè)小子是個(gè)很細(xì)致的人,很多時(shí)候都可以點(diǎn)出一些被人忽視的問題。
在仔細(xì)檢查一番過后,王向中也是瞪大了雙眼,嘴巴也張成了一個(gè)“o”字型。
因?yàn)樗娴陌l(fā)現(xiàn)了一個(gè)小問題,盡管只是變量名沒有打前綴而已。在這個(gè)時(shí)代,IDE(Integrated Development Environment,集成開發(fā)環(huán)境)并不算先進(jìn),也沒有什么檢測(cè)非法變量名的功能,充其量算個(gè)能補(bǔ)充語(yǔ)句的文本文檔工具,很多時(shí)候都是編譯一遍才能發(fā)現(xiàn)問題。
林建,初中都還沒讀完就已經(jīng)輟學(xué),從來沒有學(xué)過什么計(jì)算機(jī),卻能一眼看穿代碼中存在問題,盡管只是一個(gè)字母的錯(cuò)漏,但依然證明了,他絕對(duì)在計(jì)算機(jī)上有著過人的天賦。
常人是不可能對(duì)一堆看不懂的英文字母感興趣的,更不會(huì)有心思去理解所謂代碼背后的邏輯。
如果林建不是一個(gè)瘋子的話,那他一定是傳說中的計(jì)算機(jī)天才。
這樣的人要是能充分發(fā)揮才能,絕對(duì)不可能是一個(gè)籍籍無(wú)名之輩。
難道他真的在后世被埋沒了嗎?
王向中使勁揉了揉眼睛,再度細(xì)細(xì)打量了一番眼前表情錯(cuò)愕的林建。
那清秀的臉龐,在王向中腦海里不斷對(duì)比搜索著,很快便與一個(gè)形象完整重合。
這一發(fā)現(xiàn),也讓王向中的內(nèi)心中瞬間炸起了驚濤駭浪,難怪他第一次見到林建時(shí),就覺得眼前的林建有些眼熟,沒想到,此人竟是日后震撼華夏的不世天才——傳奇人物林建!