寫個簡單的搜尋引擎

2021-09-08 12:55:38 字數 1148 閱讀 2145

前些日子使用悟空搜尋 搭了個簡單的搜尋引擎(見這裡 ), 用著還可以,就是有一點不好,記憶體占用的太多了。每次記憶體用超了,搜尋引擎的程序都會被系統乾掉。 因為是和十三哥一起租的伺服器,兩個人的程式都在上面跑,平時還做些實驗什麼的, 為了保證伺服器不被搞死,對程序的記憶體限制暫時是不打算解開的。再說了,就我這麼個小**, 也就幾百個網頁的量,居然佔我50%的記憶體,這肯定不行的啊。

當然,這也不能怪"悟空搜尋",因為在去年的 gopherchina 大會上, 就聽見作者在講台上親口宣布,說這個資料會全都載入到記憶體, 我覺得我資料量又不大,資料都放記憶體也佔不了多少資源嘛,所以就放心大膽的用了,就是結果有點兒出乎我的意料而已。 為了解決記憶體占用過多的問題,一開始我打算修改這個專案的**,把資料放到磁碟上,減輕記憶體的壓力。 不過在開始之前,我想先更詳細的了解一下搜尋引擎,所以也就沒動手,而是先找了本講搜尋引擎的書看了看, 就是這本《這就是搜尋引擎》。

首先,感謝作者寫的這本書,講的很詳細,也很透徹,導致我看完了這本書,覺得我自己也能寫個搜尋引擎。 對於我的搜尋引擎,效率和可用性先放在一邊,和正經的搜尋引擎肯定沒法比,但是,能用。^_^

索性我也別改"悟空搜尋"了,先寫個自己的搜尋引擎練練手吧。然後就有了這個東西。目前已經在我的**使用了, 位址是 。有興趣的同學可以去看看, 搜尋結果還很粗糙,結果展示頁面也沒深加工,目前就是能湊合著用,對於查詢我自己的資料還行, 因為一共也沒多少資料,也就 400 來個網頁。

下面來說說我都幹了啥:

第一,當然就是設計框架。

因為之前使用了"悟空搜尋",我的**後台和前端以及和搜尋引擎之前的介面都是現成的, 我也不想再重新走出一條路,就用之前的東西(在這裡)。

第二,就是找庫。

先是找分詞庫,選中了 friso。這個分詞庫用起來也很簡單,容易和其它專案結合。

第三,就是寫**。

這點還是有點兒感觸的。因為這個引擎是用c寫的,在碼**的過程中,發現有些在 c++ 上作為標配的資料結構沒有,比如 map,比如 vector。作為練手,我也順便寫了個類似 vector 的容器 和乙個 map,不過 map 是用平衡二叉樹實現的,而不是紅黑樹。做這些邊角料的工作, 也增加了我對記憶體更精確的掌控能力。

第四,是使用哪種方式計算文件的相似度。

這裡我使用的是向量空間的方式,因為這種方式實現起來最簡單了。 以後有時間再嘗試使用更複雜的演算法。

ElasticSearch 搜尋引擎的簡單了解

如果以連線資料庫來模擬,lucene就是jdbc,是基本的用法。es就相當 mybatis,方便開發人員配置,訪問和呼叫。也就是說,elasticsearch 也是基於 lucene進行了封裝,底層就是lucene,提供了更為便利的訪問和呼叫 而且它也是乙個分布式搜尋引擎。因為在我們 中的資料,將來...

搜尋引擎 索引

正排索引 文件編號,單詞編號,單詞的數量,單詞出現的位置。倒排索引 1,單詞詞典,儲存單詞以及統計資訊,單詞在記錄表中的便宜,可常駐記憶體,用雜湊表儲存。2,記錄表,單詞對應的文件集合,記錄單詞出現的數目 位置。文件採用差分變長編碼。其中文件可按編號公升序排列 可利用差分編碼 也可按出現次數排列,可...

MySQL搜尋引擎程式 mysql搜尋引擎

mysql是我們比較常用的一種資料庫軟體。它有著諸多的優點,如開源的,免費的等等。其實它還有乙個很好的特點,那就是有多種引擎可以供你選擇。如果賽車手能根據不同的路況,地形隨手更換與之最適宜的引擎,那麼他們將創造奇蹟。然而目前他們還做不到那樣便捷的更換引擎,但是我們卻可以 所謂知己知彼方可百戰不殆,要...