有那麼多的網頁和關鍵詞,搜索引擎是怎樣建索引的?
是不是一個很大的表格,比如說行是各個關鍵詞,列是各個網頁,行列值則是具體的權重,這樣的說索引不是太大了么?或者是不是對關鍵詞分類來建立索引呢?謝謝回答!
參考該文《分詞與索引庫》
http://www.semyj.com/archives/544
如果想更詳細了解,可以看一些搜索引擎相關原理的書籍。
恰好對搜索引擎和SEO都有過研究,整理了一份PPT,節選部分來回答你的問題
以下主要摘自網上,詳細地址沒了...如果原作者看到,請PM我啊。在全文檢索的實現機制裡面,主要關心以下3個方面。
1. 索引裡面究竟存些什麼?(Index)2. 如何創建索引?(Indexing)3. 如何對索引進行搜索?(Search)如何創建索引?(Indexing)
第一步:一些要索引的原文檔(Document)。第二步:將原文檔傳給分次組件(Tokenizer)。第三步:將得到的詞元(Token)傳給語言處理組件(Linguistic Processor)第四步:將得到的詞(Term)傳給索引組件(Indexer)。第一步:一些要索引的原文檔(Document)。
為了方便說明索引創建過程,用兩個文件為例:
文件一:Students should be allowed to go out with their friends, but not allowed to drink beer.文件二:My friend Jerry went to school to see his students but found them drunk which is not allowed.第二步:將原文檔傳給分次組件(Tokenizer)。
分片語件(Tokenizer)會做以下幾件事情( 此過程稱為Tokenize) :1. 將文檔分成一個一個單獨的單詞。2. 去除標點符號。3. 去除停詞(Stop word) 。經過分詞(Tokenizer) 後得到的結果稱為詞元(Token) 。
在我們的例子中,便得到以下詞元(Token):「Students」,「allowed」,「go」,「their」,「friends」,「allowed」,「drink」,「beer」,「My」,「friend」,「Jerry」,「went」,「school」,「see」,「his」,「students」,「found」,「them」,「drunk」,「allowed」。
第三步:將得到的詞元(Token)傳給語言處理組件(Linguistic Processor)
語言處理組件(linguistic processor)主要是對得到的詞元(Token)做一些同語言相關的處理。對於英語,語言處理組件(Linguistic Processor) 一般做以下幾點:1. 變為小寫(Lowercase) 。2. 將單詞縮減為詞根形式,如「cars 」到「car 」等。這種操作稱為:stemming 。3. 將單詞轉變為詞根形式,如「drove 」到「drive 」等。這種操作稱為:lemmatization 。語言處理組件(linguistic processor)的結果稱為詞(Term) 。
在我們的例子中,經過語言處理,得到的詞(Term)如下:「student」,「allow」,「go」,「their」,「friend」,「allow」,「drink」,「beer」,「my」,「friend」,「jerry」,「go」,「school」,「see」,「his」,「student」,「find」,「them」,「drink」,「allow」。也正是因為有語言處理的步驟,才能使搜索drove,而drive也能被搜索出來。
第四步:將得到的詞(Term)傳給索引組件(Indexer)
索引組件(Indexer)主要做以下幾件事情:1. 利用得到的詞(Term)創建一個字典。 2. 對字典按字母順序進行排序。 3. 合併相同的詞(Term) 成為文檔倒排(Posting List) 鏈表。 * Document Frequency 即文檔頻次,表示總共有多少文件包含此詞(Term)。* Frequency 即詞頻率,表示此文件中包含了幾個此詞(Term)。綜上,這個只是搜索引擎的簡單實現,真正的肯定比這個複雜,特別是中文處理方面。
基本「像」你所說的那樣,但是關鍵詞數量比較有限的,網頁數量很大這個索引是從關鍵詞查找網頁,所以這個索引是關鍵詞為 KEY ,網頁為 VALUE 的倒排表涉及到同一個關鍵詞很多網頁的排序,有演算法定出來比如最基本的 TF-IDF
推薦閱讀:
※20180101「引得市」資料庫與「古文字缺字資料庫」更新及使用說明
※寫會MySQL索引
※20180104《傳抄古文新編字編》索引數位化完成
※「松鼠的窩」專欄文章索引
※如何理解Mysql的索引及他們的原理?