如何編寫搜索引擎,應該有怎麼樣的思路,分哪些模塊?或者有沒有適合初學者的書籍呢
初學者編寫搜索引擎?勇氣可嘉唉!
其實要看你的具體目標需求是什麼,是互聯網通用的搜索引擎服務,還是一個基於已有資料庫的搜索引擎插件,這二者涵蓋的範疇是不同的。簡單說一下搜索引擎的模塊
第一部分是 服務端的的索引系統。將內容分詞,分塊建立索引,並基於一定的演算法給予權值,用於查詢的排序。
這裡又存在結構化與非結構化,結構化就是你的索引與固定結構有關,非結構化就是不管哪裡出現一視同仁。舉例,你搜一部小說,可以選擇搜索作者還是搜索內容,這就是結構化,將作者和內容分開了。如果非結構化就是哪裡出現都給搜出來。服務端索引系統通常是非實時的,需要耗費一定的時間完成所有內容的索引,但是目前很多情況下需要追求索引效率,所以有方案是分成兩塊,一塊是整體的索引重建和權值計算(權值演算法一旦調整,或者一些新的數據加入後,往往會影響全局的權值計算。) 一塊是高效率的增量索引,方便快速滿足更新內容的查詢請求。
第二部分是查詢系統
也就是基於搜索詞或者搜索選項,通過索引庫快速查詢和排序,然後有可能再涉及基於索引查出來的一些編號去調用一些源記錄信息,整理後展現給用戶。這裡又涉及了緩存的使用,排序的邏輯以及搜索請求的處理。緩存就是為簡化海量重複查詢帶來的系統壓力,不更多解釋。排序的邏輯可能是基於權值,也可能是用戶選擇(比如新聞搜索可以選擇按照時間排序)。搜索請求如果是長串字元串,可能需要分詞,以及確定哪些是忽略詞,哪些是核心詞。等等如果是基於已有的資料庫建立搜索系統,這樣兩大部分基本就夠了。
但如果想追求進一步的逼格,可以考慮增加一個數據統計和分析後台,並與權值系統結合,比如基於用戶點擊率做權值調整,比如基於點擊排名分布做權值演算法的優化。如果是要從互聯網獲得數據,那麼就還需要一個蜘蛛系統,
選擇一些典型的數據源,基於鏈接或其他方法,遍歷網頁或數據,並做數據的前期處理以及入庫。如果數據量特別大,需要 一個存儲系統來支持。
最後,書沒有介紹的,如果只是要完成什麼任務,可以考慮看看xungle.com. 也許你什麼都不用寫就搞定了。我的畢業設計是做的一個搜索引擎,我的一個學習方式是先學會騎自行車,在問自行車的原理。
分享下我的學習經歷,
首先我只知道搜索引擎是在很多信息中搜索出有用的信息的。後來我買了一本神書,叫做《深入搜索引擎》了解最基本基本的原理,反正感覺書特別好,但是專業性特彆強,我是硬著頭皮向下看的。2,我學習了nutch,它是一個完整的應用程序包。但是自從1.2之後就變成一個爬蟲軟體了,先了解最基本的用法吧。
3,我學習了luence,在這裡我知道了luence和nutch的區別,了解了索引文件的創建和維護,修改相應的評分規則,還了解了中文分詞器。馬上到中期答辯,我學完之後就完成一個全文的檢索工具。
4,我學習了solr,我以前百度過主要的作用是,用戶可以通過http請求,向搜索引擎伺服器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果(百度的結果),然後就可以將nutch爬取的數據提交給solr處理,根據相應的返回結果集進行頁面展示處理。
下面給你推薦幾本書
深入搜索引擎luence in action王雪松的 基於nutch+luence開發搜索引擎solr in action 一個我找了沒有中文版,不過在博客上有人翻譯還有楊尚官的博客,我的中文分詞就是看完他之後才真正理解的自學這玩意不太靠譜,做出來的跟工業級系統差太遠。
建議先研究一下開源系統,比如lucene,然後找個相關工作實際操作幾年。搜索引擎這個概念實在太大了。大公司一般都是一個大平台,nlp處理,這裡面還嫁接了廣告演算法,推薦演算法。大體分:分詞系統,搜索意圖解析,詞法分析,語法分析,句法分析,依存分析,ranking排名,反作弊。。。單純分詞那塊就夠你研究了。怎麼整合這些系統,這裡又涉及到架構,分散式,演算法,數據結構,offline系統,online系統。。。。 可以先從開源的搜索和抓取項目看起。nutch,solr,lucene,sphnix,elasticsearch,lily.......這裡面任何一個研究好了,都夠你工資過10k了
如果題主真的想要入門的話,我又要推銷了!這是我當時寫的一個比較簡單的搜索引擎,:
jiangxincode/SearchEngine · GitHub沒有什麼高級的概念,用來理解搜索引擎的工作原理還是不錯的,最主要可以人工答疑。如果題主想要進一步深入的話,看一下nutch等開源實現吧!另外推薦幾本入門書籍:如果你打算未來的工作就是搜索引擎相關,希望打下堅實的基礎,先看這本書,這本書主要是原理介紹,但是深度基本夠了:Managing Gigabytes: Compressing and Indexing Documents and Images ian H. Witten / Alistair Moffat / Timothy C. Bell ian H. Witten / Alistair Moffat / Timothy C. Bell
然後再看這些書就是小兒科了:
- 走進搜索引擎 梁斌
- 自己動手寫網路爬蟲 羅剛
- 自己動手寫搜索引擎 羅剛
- 這就是搜索引擎 張俊林
- Lucene in Action 2nd Edition
- 開發自己的搜索引擎:Lucene.Heritrix(第2版)
其實你會逐漸發現其實搜索引擎這個東西原理很簡單,誰都能寫個,但是寫好就不是說說這麼簡單了,要不人家google和百度怎麼活,這種東西到最後就得不斷看最新的論文,不斷的挖掘數學和統計知識。當然這超出了大多數人的工作範疇,我就不再這裡露怯了……
有本書叫自己動手寫搜索引擎 (豆瓣),不過我沒看過。同系列的看過自己動手寫操作系統 (豆瓣),感覺不錯。
CS 3245 Information Retrieval
值得你一看再看。不說別的。視乎你想幹嘛,想玩玩概念熟悉下請看 集體智慧編程,裡面有實現簡單的搜索引擎的,簡單的實現之後可以看一本叫 這就是搜索引擎 的書。如果你想工業中用,請學lucene。~~~可惜知乎不能夠上傳資料
嗯,這是我大二的時候用Python寫的,很簡單,僅供學習使用。TinySearchEngine
給個星哦 ^_^
全文搜索用開源的solr,爬蟲可以考慮nutch,如果還想加入機器學習演算法來優化solr,可以考慮mahout,演算法在這裡就不細說了,若按照上面全部搭完,最起碼可以用。。。
離線部分
1.爬蟲2.預處理3.索引生成在線部分
4.索引查詢 自己動手試試,慢慢你就會發現你做的基本上沒啥用處,但是還是可以試一試的~CIS455
1.倒排索引,關鍵詞TF-IDF,以及對應的儲存和查詢,如果no idea就看看lucene的儲存結構,自己理解一下,不用照搬,能實現自己需求就好,這部分做好了,就可以簡單的根據關鍵詞查找內容了。2.網路爬蟲,這個太多了,不說了。3.中文分詞,沒這個你怎麼索引和查詢中文?如果自己擼,搞個基於詞典Trie樹匹配的就好,沒必要上機器學習。至此,已經可以拿來展示一下結果了,不過還和工業級差太遠,還可以改進的地方比如RankPage演算法啦,用奇異值分解之類的數學方法優化啦,分散式啦,什麼什麼的。這部分我也沒做過,就不班門弄斧了。
覺得要先會基於開源的搜索引擎做點小東西,然後在深入理解其核心實現,比如elasticsearch
推薦閱讀:
※知乎的搜索功能改由搜狗提供之後,實際使用效果怎麼樣?
※UCWeb 稱神馬搜索獲中國 20% 的搜索引擎市場份額,數據可信嗎?
※如何看待即刻搜索和盤古搜索的發展?
※Google 在哪些國家敗給了當地的搜索引擎?
※為什麼 Google.com 中文版與英文版搜索結果不同?