??? 最近想研究一下搜索引擎,看資料前,前幾晚趟在床上初步琢磨了一下;其實自己以前也有些零星的想法,先把自己的初步方案記錄下來。再和Lucence等對比一下,檢驗一下自己的想法。
??? 主要是搜索引擎的基本架構和數據模型。
??? 1. 基本架構
?????? 按照使用這么多年Yahoo,Baidu的經驗,Search Engine要做的事兒就是:輸入幾個關鍵字,查詢出很多的網址列表。 列表一般按匹配度,網址的跳轉頻率等排序,也要簡單列出該網頁的前幾十個字作為摘要。
?????? 所以查詢模塊是最外層的,也是第一個模塊。
???
????? Engine內部要存儲這些網址列表和關鍵詞信息,首先要采集網址數據。因此采集模塊是整個系統的數據來源。采集時,要分析網頁中詞(Word),并建立詞和網頁之間的關聯,因此詞法分析模塊是采集后的一個數據處理模塊。?????
???? 大概先這么多吧:
???? 1) 采集
???? 2) 詞法分析
???? 3) 搜索
???? 4) 數據存儲(DB或File)
2. 模塊及處理
??? 1) 資源采集模塊(Resource Collect)
?????? 互聯網的所有信息以資源形式出現,雖然資源有不同形式:網頁,普通文本,圖片,視頻,音樂等,但都可以用 URL 來唯一標識。
????? 先只考慮對網頁的搜索處理。
????? 初步可以考慮,根據給定幾個門戶網站進行層次性采集。比如:從 sohu.com 首頁,采集該頁面所有鏈接 Link ,在對所有鏈接再進行同樣的分析,由于網頁一個鏈多個,不斷向下鏈接,因此僅從一個給定的 URL向下分析,就能分析出很多URL,可能無窮盡,因此可以指定采集到那個層次深度 deep。 采集將所有的網頁URL信息及基本信息存入 URL 庫。
?????? 動態采集:比如你在javaeye中發表一篇新blog,google過會就能搜索到了。肯定不是上面的采集方法。至于什么方法,我暫時沒想到,到時再看相關資料。暫時只考慮第一種采集。
??? 2) 詞法分析(Word Analyze)?
????? 對采集的URL庫逐一進行分析,目的是分析出每個網頁文本內容包含的 Word,并建立 Word 和 URL的對應關系索引。
????? 英文分詞容易,按空格。而中文比較棘手。但中文中的詞在語言學上應該是一個有限集合 WordSet,假定符合語義的詞都在一個字典中 dictionary,那么,分析URL時,對漢字的組合進行字典檢查,符合語義的詞才保存到 Word 庫中。
????? 詞法分析,暫定按漢字個數組合依次分析:2個,3個,4個。OK,先這么多,多的也不管啦。也就是說假定合法的漢語Word只包含2,3,4個漢字。
???
???? 3) 搜索(Search)
?????? 單詞搜索:用戶輸入單個Word,系統在數據中進行查詢。按Word-URL索引進行快速等值匹配。將符合的URL列表返回,包含網頁標題,URL,前50字的摘要等信息。URL列表的排序是個關鍵,按下列順序排序:標題匹配,摘要匹配,正文匹配,URL被搜索次數。
????? 每次搜索,系統對被搜索Word的搜索次數+1,結果集合中的網頁URL被搜索次數+1, 被點擊的結果URL,對其點擊次數+1.
????? 先不考慮分頁。
3. 數據模型
????? 1) 首先有幾個基本數據項:網頁(URL),詞(Word),詞組(WordGroup)。
??????? 詞庫 Word:wordID, word
?????? 詞組庫: WordGroup:wordGroupID, wordGroup
?????? 網頁 URL: 網頁是 text/html 類型的資源,它有幾個基本屬性:
?????????? URL,
?????????? 標題(Title),
???????? 摘要(Abstract),
???????? 建立時間(Time),只入URL庫被索引起來的時間。
??????
??????? 其中URL是唯一標識,互聯網上,任何資源都可以用一個URL唯一表示,因此,被索引的就不只是網頁,圖片,視頻,一般文件等都可以作為引擎搜索的對象。
???? 2)? 匹配 (Match關系)
?????? 在詞法分析時,所有詞都是被選關鍵詞,要快速查詢,需要建立所有詞和網頁的關系索引,因此需要URL-Word關系,N:M, 這個關系就是匹配索引(MatchIndex)。 詞法分析模塊的結果就是生成Word詞庫,URL庫和 Match 關系。 查詢時,就可以根據Word快速找到網頁(或URL)。
??????? Match屬性:
???????? wordID,
???????? urlID,
???????? keywordMatch, 網頁關鍵詞是否匹配,用<meta/> keyword進行判斷;
????????? urlMatch,url是否匹配
????????? abstractMatch,摘要匹配次數,
????????? fullTextMatch, 除摘要外的全文匹配次數,
????????? matchLocs, 摘要和全文匹配位置列表,記錄多個位置,逗號隔開,格式: "loc1,loc2,loc3", 例如"3,19,230"
???????? matchTime, 詞法分析記錄下此匹配記錄的時間
??????????
????????
????? 3) URLGroup: 按詞組搜索肯定是要考慮的,因此也要建立詞組和網頁的關系:URL-WordGroup。詞組是查詢時輸入的,是分散的幾個word組成的一個臨時組,WordGoup也是在查詢階段建立的。
???? 4) WordGroupMatch: wgID,urlID.
???? 5) SearchRecord: 對搜索查詢要做記錄,主要是記錄用戶搜索關鍵詞的頻率。SearchRecord:WordID,URL,Time,IP.
??? 6 WordFrequency: 搜索結果要記錄輸入的關鍵詞頻率:WordFrequency:Word,Frequency.
??? 7) 相應的,需要有:WordFGrouprequency
???
URLFrequency: 搜索結果對匹配的網頁也要記錄它的頻率,讓用戶的搜索行為反應到網頁被搜索的頻率上,以后的查詢結果,不斷根據網頁被搜索的次數調整在搜索結果中的順序。URLFrequency:URL,frequency
??? 主要是搜索引擎的基本架構和數據模型。
??? 1. 基本架構
?????? 按照使用這么多年Yahoo,Baidu的經驗,Search Engine要做的事兒就是:輸入幾個關鍵字,查詢出很多的網址列表。 列表一般按匹配度,網址的跳轉頻率等排序,也要簡單列出該網頁的前幾十個字作為摘要。
?????? 所以查詢模塊是最外層的,也是第一個模塊。
???
????? Engine內部要存儲這些網址列表和關鍵詞信息,首先要采集網址數據。因此采集模塊是整個系統的數據來源。采集時,要分析網頁中詞(Word),并建立詞和網頁之間的關聯,因此詞法分析模塊是采集后的一個數據處理模塊。?????
???? 大概先這么多吧:
???? 1) 采集
???? 2) 詞法分析
???? 3) 搜索
???? 4) 數據存儲(DB或File)
2. 模塊及處理
??? 1) 資源采集模塊(Resource Collect)
?????? 互聯網的所有信息以資源形式出現,雖然資源有不同形式:網頁,普通文本,圖片,視頻,音樂等,但都可以用 URL 來唯一標識。
????? 先只考慮對網頁的搜索處理。
????? 初步可以考慮,根據給定幾個門戶網站進行層次性采集。比如:從 sohu.com 首頁,采集該頁面所有鏈接 Link ,在對所有鏈接再進行同樣的分析,由于網頁一個鏈多個,不斷向下鏈接,因此僅從一個給定的 URL向下分析,就能分析出很多URL,可能無窮盡,因此可以指定采集到那個層次深度 deep。 采集將所有的網頁URL信息及基本信息存入 URL 庫。
?????? 動態采集:比如你在javaeye中發表一篇新blog,google過會就能搜索到了。肯定不是上面的采集方法。至于什么方法,我暫時沒想到,到時再看相關資料。暫時只考慮第一種采集。
??? 2) 詞法分析(Word Analyze)?
????? 對采集的URL庫逐一進行分析,目的是分析出每個網頁文本內容包含的 Word,并建立 Word 和 URL的對應關系索引。
????? 英文分詞容易,按空格。而中文比較棘手。但中文中的詞在語言學上應該是一個有限集合 WordSet,假定符合語義的詞都在一個字典中 dictionary,那么,分析URL時,對漢字的組合進行字典檢查,符合語義的詞才保存到 Word 庫中。
????? 詞法分析,暫定按漢字個數組合依次分析:2個,3個,4個。OK,先這么多,多的也不管啦。也就是說假定合法的漢語Word只包含2,3,4個漢字。
???
???? 3) 搜索(Search)
?????? 單詞搜索:用戶輸入單個Word,系統在數據中進行查詢。按Word-URL索引進行快速等值匹配。將符合的URL列表返回,包含網頁標題,URL,前50字的摘要等信息。URL列表的排序是個關鍵,按下列順序排序:標題匹配,摘要匹配,正文匹配,URL被搜索次數。
????? 每次搜索,系統對被搜索Word的搜索次數+1,結果集合中的網頁URL被搜索次數+1, 被點擊的結果URL,對其點擊次數+1.
????? 先不考慮分頁。
3. 數據模型
????? 1) 首先有幾個基本數據項:網頁(URL),詞(Word),詞組(WordGroup)。
??????? 詞庫 Word:wordID, word
?????? 詞組庫: WordGroup:wordGroupID, wordGroup
?????? 網頁 URL: 網頁是 text/html 類型的資源,它有幾個基本屬性:
?????????? URL,
?????????? 標題(Title),
???????? 摘要(Abstract),
???????? 建立時間(Time),只入URL庫被索引起來的時間。
??????
??????? 其中URL是唯一標識,互聯網上,任何資源都可以用一個URL唯一表示,因此,被索引的就不只是網頁,圖片,視頻,一般文件等都可以作為引擎搜索的對象。
???? 2)? 匹配 (Match關系)
?????? 在詞法分析時,所有詞都是被選關鍵詞,要快速查詢,需要建立所有詞和網頁的關系索引,因此需要URL-Word關系,N:M, 這個關系就是匹配索引(MatchIndex)。 詞法分析模塊的結果就是生成Word詞庫,URL庫和 Match 關系。 查詢時,就可以根據Word快速找到網頁(或URL)。
??????? Match屬性:
???????? wordID,
???????? urlID,
???????? keywordMatch, 網頁關鍵詞是否匹配,用<meta/> keyword進行判斷;
????????? urlMatch,url是否匹配
????????? abstractMatch,摘要匹配次數,
????????? fullTextMatch, 除摘要外的全文匹配次數,
????????? matchLocs, 摘要和全文匹配位置列表,記錄多個位置,逗號隔開,格式: "loc1,loc2,loc3", 例如"3,19,230"
???????? matchTime, 詞法分析記錄下此匹配記錄的時間
??????????
????????
????? 3) URLGroup: 按詞組搜索肯定是要考慮的,因此也要建立詞組和網頁的關系:URL-WordGroup。詞組是查詢時輸入的,是分散的幾個word組成的一個臨時組,WordGoup也是在查詢階段建立的。
???? 4) WordGroupMatch: wgID,urlID.
???? 5) SearchRecord: 對搜索查詢要做記錄,主要是記錄用戶搜索關鍵詞的頻率。SearchRecord:WordID,URL,Time,IP.
??? 6 WordFrequency: 搜索結果要記錄輸入的關鍵詞頻率:WordFrequency:Word,Frequency.
??? 7) 相應的,需要有:WordFGrouprequency
???

更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
