日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打造自己的分布式搜索引擎底层架构(非Lucene)

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打造自己的分布式搜索引擎底层架构(非Lucene) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

打造自己的分布式搜索引擎底層架構(非Lucene)

大家知道,搜索引擎技術不僅僅是類似百度首頁的應用,還可以衍生出數據分析工具,商務智能工具等許多有賣點的應用,甚至是社會化關系通道的發現。
甚至這些非搜索引擎的搜索引擎產品才是最重要的,因為你不需要去做百度做的事情。
所以,搜索引擎技術要了解原理,才可以擴展,離開Lucene也能做搜索引擎是非常重要的,利用這個積木,我們可以搭建房子和汽車。


搜索引擎要完成的目的,就是O(1)秒殺爬蟲采集來的文章里關鍵字的搜索,丫的和數據庫Like不同的效果優點是速度快,缺點是如果沒建索引的字,搜不到。

本文是針對:打造一個自己的搜索引擎服務器的積木底層模塊,給大家擴展思路和分析知識,同時為我下一步的工作打下基礎。
但是這個基本思路我要保證是靠譜的,并且可以達到給大家分享數據結構知識的目的。

?
做自己的搜索引擎(非Lucene),需要兩大幾方面的知識:

一,簡單夠用的分布式;

二,基本的數據結構和算法,知道復雜度和數據結構的對應關系。

重點是二

所以本文會花時間講解如何利用.Net自帶的集合干這個事兒。

先快速把一部分帶過:

1,文件+數據庫服務器群,首先你要有大量的文章,爬蟲采集來的或者你用啥辦法搞來的,這些按T計算的文章一個機器放不下,也沒必要放一起,因為硬盤并發性能比較差,你需要有一堆機器是存放這些文件的,處理文件的事兒,交給這些機器并發去處理,而不應該是

一個機器排隊處理,如果用.NET來做WCF架構比較合適,WCF自己去搜索,本文不細談。

2,Web服務器群,數據庫要應付大量搜索請求,搜索引擎才有意義,所以Web負載均衡和反向代理是必要的,自己去搜反向代理,Nginx,Squid之類的詞,本文不講。

3,MemChached群,是分布式的哈希表,一個機器放不下我們期望的內存數量,自己去搜MemChached,本文不講。

4,索引服務器群,就是定時或者一直在忙活簡歷索引的后臺服務器,單獨搞幾臺。

總之你需要4群服務器,每個群的數量看需要和你的錢數調整,沒錢就都搞一個機器上,如果只是實驗的話。

下面是本文的關鍵部分。
先說數據結構的原理:(數據結構和算法要解決的基本問題就是搜索和排序)

1,搜索:查找一個東西有還是沒有,復雜度是O(1),哈希表,搜索引擎就是利用哈希表的這個特性,其他O(n)或O(logN)的搜索不適合干這個。
2,排序:如果大家都有,那么哪個文章詞出現的頻率就是決定顯示的排序,排序,職業的做法是O(N*logN)時間空間都OK,如果你說只學過冒泡,那你拿鼠標拍自己的頭吧,趕緊找本書看看為啥冒泡O(n^2)是業余的。
3,動態排序的概念是對于新插入的元素能以O(LogN)的復雜度到達自己應該站的位置,一般做法是二叉堆,在.Net里是SortedList<T,T>泛型容器,至于里邊實現,不管他,反正滿足我們需要的復雜度。

好,以上三個概念是我們解決一切問題的出發點,復雜度和數據結構的對應關系一定要形成大腦的條件反射,不需要你非要數據結構考試85分,但是這種意識是優秀程序員必備的。

分析搜索的過程:
0,高頻字典:我們提前準備個高頻字典,是哈希字典容器Dict<WordID(int),Word(string)>;這個可以放在集群MemCached里,也可以按照你的機器數量分段存放。

1,輸入檢驗:用戶輸入一個詞,先檢驗這個詞在詞典里要有編號,沒編號的加進去,當然新放的不可能被搜到,建立索引后下次才能被搜到;

2, 哈希搜索:要達到O(1),我們必須知道這個詞對應哪些文章。需要這樣一個哈希字典容器Dict<WordID(int),SortedList<DocID(int),Freq(int)>>;這樣能返回一堆排序好的文章。我們先假設按照詞的頻率去排序。

3,初始化分詞:為了實現SortedList<T,T>,我們在第一次初始化分詞,就是把文章里出現的二字,三字,四字長的等詞匯,找出來,按照出現的頻率進行排序,這個以文章為索引的也要建立。Dict<DocID(int),SortedList<WordID(int),Freq(int)>>
?http://topic.csdn.net/u/20070914/17/9A27E63A-CAD6-4955-8E14-61DC9357A8AD.html這里有我以前寫的例子,本文不細說了。

4,分詞作業:為了保證用戶輸入的都被索引,分詞要形成作業,就是有個后臺程序不斷的維護這個搜索引擎的分詞索引,還要及時把索引序列化到文件里,保存起來,以便下次開機后不需要再計算。

5,新加的文章需要進行3的步驟,新加的用戶詞匯,比如“給力”需要進行4的步驟。

其他輔助步驟
1,爬蟲采集數據,文章的粒度,新聞要大文本存放,不論是數據庫的Text字段還是純文本,都要把HTML標簽分解開來,如果對于微博,要分解到用戶ID,文章ID,轉發ID,粉絲ID等可以被計算的數值。
2,語義分析,如評論的正面還是負面,需要分揀數據,人工賦予智能。
3,文章重復或者相關性檢測,利用關鍵字分布的頻率,余弦算法(自己去搜索)來計算相似度。
?
?
先寫到這里,后續想到的,再補充,中間被一串會議打斷了思路。

?

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/superdullwolf/archive/2011/01/26/6165342.aspx

轉載于:https://www.cnblogs.com/dullwolf/archive/2011/01/27/1945908.html

總結

以上是生活随笔為你收集整理的打造自己的分布式搜索引擎底层架构(非Lucene)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美另类在线视频 | 国产精品二区在线观看 | 人成网站在线观看 | 日韩成人在线免费视频 | 久久77777| 性生交生活片1 | 亚洲欧美第一页 | 岛国成人在线 | 91麻豆国产在线观看 | 欧美日韩精品一二三区 | 精品久久久999 | 大牛影视剧免费播放在线 | 日批免费看 | 国产精品成人69xxx免费视频 | 97久久国产亚洲精品超碰热 | 绯色av一区 | 在线观看网址你懂的 | 五月天免费网站 | 久久久精品免费视频 | 国产精品一区二区免费视频 | 国产真人做爰视频免费 | 福利视频一二区 | 中文字幕色片 | 99热成人| 91传媒理伦片在线观看 | 青青青在线观看视频 | 五月激情综合 | 欧美福利影院 | 欧美精品福利 | 久久久久久久久久久久久女过产乱 | 国产精品精品国产 | 成人影院免费 | 亚洲女人天堂色在线7777 | 影音先锋黑人 | 欧美顶级metart裸体全部自慰 | 久草福利资源在线 | 亚洲一区二区三区不卡视频 | 污污视频免费观看 | 色网站在线 | 国产精品日韩一区二区三区 | 花房姑娘免费观看全集 | 久热超碰| 在线美女av | 成人免费看片视频 | 性少妇mdms丰满hdfilm | 精品一区二区电影 | 欧美性猛交乱大交3 | 少妇人妻真实偷人精品视频 | 日本黄色大片在线观看 | 欧美一区二区三区大屁股撅起来 | 欧美理伦片在线播放 | av男人网 | 美女扒开尿口给男人看 | 成年人网站免费在线观看 | 日本天堂网 | 国产精品一区二区在线观看 | 久久黄色片视频 | 国产视频二 | 韩国伦理在线看 | 欧美中文字幕第一页 | 亚洲无av在线中文字幕 | 午夜剧场欧美 | 国产区视频在线 | 免费无码又爽又黄又刺激网站 | 亚洲乱亚洲乱妇 | 亚洲精品视频播放 | 黄色一级影片 | 毛片全黄| 亚洲av综合永久无码精品天堂 | 一个色综合网 | 中文欧美日韩 | 噜噜色图 | 亚洲视频在线观看免费 | 成人精品视频一区二区 | 久热一区 | 高清一区在线观看 | 日本女优中文字幕 | 一本色道久久综合精品婷婷 | 国产传媒视频在线观看 | 中文字幕第6页 | 人妻无码中文久久久久专区 | 亚洲啪啪 | 久热最新视频 | 成人免费高清 | 日韩区在线 | 亚洲 欧美 激情 另类 | 色哟哟网站 | 一本av在线 | 黑丝一区二区三区 | 青青草视频 | av黄色小说 | 麻豆视频精品 | 免费裸体视频网站 | 国产精品国产馆在线真实露脸 | 亚洲亚洲人成综合网络 | 九九九在线视频 | 欧美日韩视频免费观看 | 69久久夜色精品国产69 | 十八禁一区二区三区 |