從零開始,寫乙個搜尋引擎 (0x01)

2021-07-11 03:33:36 字數 1279 閱讀 2911

第零部分我們已經列了乙個提綱了,這一篇文章開始要詳細說說了。

在說搜尋引擎架構分層之前,我們先確定幾個搜尋引擎的概念。

好了,上面就是搜尋引擎的最基本的概念,搜尋引擎簡單的說分成兩部分,一部分就是索引器把文件變成倒排正排檔案,第二部分就是檢索器通過倒排正排檔案還原文件的過程。

資料庫其實也是乙個搜尋引擎,只是資料庫和搜尋引擎的側重點不太一樣,搜尋引擎追求的是簡單,速度快,而資料庫追求的是穩定和複雜邏輯對資料的處理,所以應用場景不太一樣。

既然知道了乙個搜尋引擎的基本概念,應該怎麼來設計這個搜尋引擎呢?

按照一般的軟體設計邏輯,如果不是非常複雜的系統,要設計乙個系統,首先要設計資料結構,然後把資料結構封裝到各個演算法和類中,然後將各個類組合起來就完成了,所以,我設計這個引擎,是基於以下幾個層次來的。

按照上面這些個模組,乙個搜尋引擎,在整體架構上大約分成以下幾個層次

在實現的時候,為了盡量簡單,每個模組基本上都是乙個檔案來實現的,用了golang以後,**寫起來也自由起來了,只要清晰就行,所以整個引擎下來,**量其實不是很大。

下面這個圖就是整個**的大框架圖,後面我們會乙個乙個的來講這些東西。

通過這一篇文章,希望能對搜尋引擎有個初步的了解了,後面我會乙個乙個模組乙個乙個技術點的來拆分一下這個搜尋引擎。

接下來的文章會開始介紹搜尋引擎的底層技術了,倒排索引【會花比較多精力來說倒排索引,畢竟這是核心的核心】,正排索引【這個簡單,就是陣列】,在介紹的時候會有幾篇文章介紹實現倒排索引技術需要的一些演算法和資料結構。

**託管在github上,位址是**還在不斷更新中,目前**量,去掉單元測試檔案,大約是6000行,因為是想到哪寫到哪,有些函式也沒有用,所以還有優化空間,也希望大家提交你的patch,後面講的時候可以對照**看看。

**結構如下,再說一遍,**量不大,結構也非常簡單,雖然我寫的**注釋不多,但是沒有使用任何高階功能,閉包都沒有,直接看沒任何難度。

搜尋引擎的乙個秘密

有a和b兩個站點,其中從a可以到達b,從b不能到達a,而使用者希望兩個站點都常看時,顯然就會收藏a站點,我們可以把a看作入口站點,一般搜尋引擎 門戶 的目錄頁等,充當的都是入口站點功能。搜尋引擎在這樣的情況下,通常會給a乙個較低權值,而給b乙個較高權值,這是搜尋引擎的乙個秘密 優先收錄最終級別的內容...

Wolfram Alpha 乙個 事實搜尋引擎

乙個強大的事實搜尋引擎,用過才知道,好像要翻一下qiang。例如搜尋乙個法國25歲男人的剩餘壽命,會給你乙份詳細的報告,以及概率分布。介紹摘自維基百科。wolfram research公司的總裁史蒂芬 沃爾夫勒姆於2009年3月宣布了此項計畫。該產品於2009年5月15日正式發布。1 另外,wolf...

從零開始寫乙個Redis 1

為了學習redis和更好地理解redis,決定自己寫乙個c 版本的redis 2.redis協議解析 第一,我這裡僅僅只是學習redis的思想。所以使用的是c 而且很多資料結構使用stl。第二,我這裡不追求效能,所以不會極致地去考慮效能問題,而是以實現功能為主。對於看過redis原始碼的我來說,實際...