搜索引擎

搜索引擎

為什么需要搜索引擎?

1.對于海量數(shù)據(jù)的搜索傅联,SQL語句查詢幾乎 不能達到要求秸苗,因為在海量數(shù)據(jù)中這種查詢響應時間 遠遠超過用戶能夠接受的等待時間。

2.不能很好的命中索引:對于like這類模糊查詢爹土,只有后模糊匹配語句才能命中索引甥雕,一旦沒有命中索引則會掃描全表 性能低下

搜索引擎的通用算法和結(jié)構(gòu)
  1. 搜索引擎分類
    1. 全文搜索引擎 對網(wǎng)頁的文字、圖片胀茵、視頻和鏈接等內(nèi)容進行搜索社露。
    2. 垂直搜索引擎 對網(wǎng)站垂直領(lǐng)域進行收集和處理,如在商旅網(wǎng)站中對機票琼娘、旅游信息等進行搜索的搜索引擎
    3. 元數(shù)據(jù)搜索引擎 對數(shù)據(jù)的數(shù)據(jù)進行搜索和處理峭弟,如文章中有多少字數(shù)附鸽,文件的大小等,可將其看做是多種搜索引擎的數(shù)據(jù)進行整合后再提供給用戶的搜索引擎
  2. 必須知道的倒排索引
    1. 正排索引 正排索引是以文檔ID為關(guān)鍵字瞒瘸,正排表中記錄文檔中每個關(guān)鍵字問題的位置信息坷备,查詢需要便利每一個文檔。正排索引是按照key去尋找具體的value情臭。
    2. 倒排索引 倒排索引是指依據(jù)關(guān)鍵詞查找文檔省撑,用關(guān)鍵詞作為索引的key,每個關(guān)鍵詞的倒排索引都的值都是一個列表。倒排索引其實就是 先將記錄中的某些列進行分詞俯在,然后形成分詞 與文檔ID的映射關(guān)系竟秫。
互聯(lián)網(wǎng)搜索引擎的技術(shù)架構(gòu)
  1. 發(fā)生在用戶搜索前
    1. 使用爬蟲技術(shù)抓取網(wǎng)絡中的網(wǎng)頁并且下載到本地
    2. 用去重模塊對下載的網(wǎng)頁進行去重,確保每個網(wǎng)頁都包含獨一無二的內(nèi)容
    3. 用解析模塊去對去重后的網(wǎng)頁進行解析跷乐,用算法對抓取的網(wǎng)頁解析肥败,構(gòu)建倒排索引表,并進行相關(guān)的操作愕提。最終搭建出一個鏈接關(guān)系
    4. 對已經(jīng)完成的倒排索引表及鏈接關(guān)系等進行反作弊處理馒稍,例如剔除掉一些敏感信息。
  2. 發(fā)生在用戶搜索過程中
    1. 搜索引擎接受用戶搜索的關(guān)鍵詞 進行查詢分析
    2. 搜索引擎在緩存系統(tǒng)中搜索是否有與用戶搜索關(guān)聯(lián)詞匹配的內(nèi)容
      1. 如果有 則直接返回給用戶
      2. 如果沒有浅侨,則利用內(nèi)容相似性纽谒、鏈接分析算法對網(wǎng)頁進行排序,把用戶想要的內(nèi)容放在展示列表的前面仗颈,并把列表放入緩存系統(tǒng)中
Lucene 與Elasticsearch的前世今生

Lucene是早期出現(xiàn)的一些開源搜索引擎當中最受歡迎的佛舱,但是隨著業(yè)務發(fā)展Lucene無法滿足業(yè)務實現(xiàn)。所以基于Lucene構(gòu)建了一套功能強大的搜索平臺Elasticsearch挨决。

Elasticsearch相比Lucence具備如下優(yōu)勢

  1. 接近實時
    1. 從索引一個文檔到這個文檔能夠被搜索到只有很小的延時
    2. 基于Elasticsearch執(zhí)行搜索和分析可以達到秒級
  2. 集群
    1. 利用Elasticsearch可以很方便地搭建集群请祖。在Elasticsearch集群中有很多節(jié)點,其中一個是主節(jié)點脖祈,主節(jié)點是通過枚舉產(chǎn)生地肆捕。
  3. 節(jié)點
    1. client_node 做請求分發(fā)
    2. master_node 主節(jié)點 所有的新增、刪除及數(shù)據(jù)分片都是由主節(jié)點來操作的盖高,它也提供搜索請求功能
    3. data_node 只能進行搜索操作慎陵,具體Elasticsearch分配哪個data_node來進行操作是由client_node決定的
  4. 文檔
    1. 文檔是由Elasticsearch的最小數(shù)據(jù)單元,一個文檔可以是一條商品數(shù)據(jù)喻奥,也可也是一個訂單數(shù)據(jù)通常是JSON格式
  5. 索引
    1. 索引主要用來存儲Elasticsearch的數(shù)據(jù)席纽,索引包含一堆相似的文檔數(shù)據(jù),例如商品數(shù)據(jù)撞蚕,一個索引包含很多文檔润梯。
  6. 文檔類型
    1. 文檔類型用來規(guī)定文檔中字段內(nèi)容的數(shù)據(jù)類型和其他的一些約束,相當于關(guān)系型數(shù)據(jù)庫中的表
  7. 分片
    1. 單臺機器無法存儲大量數(shù)據(jù),Elasticsearch可以將一個索引中的數(shù)據(jù)切分為多個分片纺铭,這些分片分布在多臺服務器上寇钉。有了分片就可以橫向擴展,存儲更多數(shù)據(jù)舶赔,讓索引和分析等操作分不到多臺服務器上去執(zhí)行扫倡,從而提升吞吐量和性能。
  8. 副本
    1. 任何一個服務器隨時可能出現(xiàn)故障或者宕機竟纳,此時分片可能會丟失撵溃。因此,可以分為每個分片創(chuàng)建多個副本锥累。副本可以在分片出現(xiàn)故障時提供備用服務征懈。
Elasticsearch分布式架構(gòu)原理
  1. 添加索引 Elasticsearch中索引與分片的關(guān)系
    1. 分片是最小級別的工作單元,它只保存了索引中所有數(shù)據(jù)的一部分
    2. 所有的文檔均存放在分片中揩悄,而直接與應用程序進行交互的是索引。
  2. 如何保證高可用鬼悠?
    1. 當Node節(jié)點宕機删性,會進行重新選舉。
  3. 如何擴展焕窝?
    1. Elasticsearch要求在創(chuàng)建索引時就指定分片數(shù)量蹬挺,所以主分片在之后后就不能再進行擴充了。
Elasticsearch大數(shù)據(jù)量 提高Elascicsearch查詢效率
  1. 性能力利器FileSystem cache

在查詢數(shù)據(jù)時它掂,Elasticsearch主要依賴于底層的FileSystem Cache巴帮,即先通過任意一個分片Shard在FileSystem cache中查找數(shù)據(jù),入股哦查到直接返回虐秋;否則查詢磁盤文件并且將數(shù)據(jù)緩存到FileSystem cache中

假如有3臺服務器榕茧,內(nèi)存都是32GB Elasticsearch的JVM heap被設置為16GB 留給FileSystem Cache的還有16GB

此時3臺服務器能夠被緩存的數(shù)據(jù)量=3*16GB=48GB 所以只有這48GB的數(shù)據(jù)的查詢速度會很快。

  1. 數(shù)據(jù)預熱
    1. 如果Elasticsearch集群中每個機器寫入的數(shù)據(jù)都超過FileSystem cache的容量很多客给, 比如寫入70G FileSytem只有30G 那么還有40G就被寫入磁盤當中了可以使用數(shù)據(jù)預熱的方案來解決該問題用押。
      1. 將被頻繁的熱點數(shù)據(jù)提前放進Elasticsearch索引中,或者用一個熱點數(shù)據(jù)檢測系統(tǒng)定時或者實時地找出熱點數(shù)據(jù)
      2. 將發(fā)現(xiàn)的熱點數(shù)據(jù)提前放進FileSystem Cache靶剑。這樣用戶正常訪問性能會很高蜻拨。
  2. 冷熱分離
    1. 可以將大量很少被訪問的數(shù)據(jù)放進一個單獨的Elasticsearch索引中,將熱點數(shù)據(jù)放進另外一個數(shù)據(jù)當中桩引。
  3. 索引文檔設計
    1. 在Elastcisearch中不建議使用復雜的關(guān)聯(lián)查詢 因為它會降低性能缎讼,所以如果有復雜的查詢建議在程序當中完成
  4. 分頁性能優(yōu)化
    1. 避免使用深度分頁
    2. 使用游標查詢
    3. 使用search_after搜索
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坑匠,隨后出現(xiàn)的幾起案子血崭,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件功氨,死亡現(xiàn)場離奇詭異序苏,居然都是意外死亡,警方通過查閱死者的電腦和手機捷凄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門忱详,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跺涤,你說我怎么就攤上這事匈睁。” “怎么了桶错?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵航唆,是天一觀的道長。 經(jīng)常有香客問我院刁,道長糯钙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任退腥,我火速辦了婚禮任岸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狡刘。我一直安慰自己享潜,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布嗅蔬。 她就那樣靜靜地躺著剑按,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澜术。 梳的紋絲不亂的頭發(fā)上艺蝴,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音鸟废,去河邊找鬼吴趴。 笑死,一個胖子當著我的面吹牛侮攀,可吹牛的內(nèi)容都是我干的锣枝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼兰英,長吁一口氣:“原來是場噩夢啊……” “哼撇叁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起畦贸,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤陨闹,失蹤者是張志新(化名)和其女友劉穎楞捂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趋厉,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡寨闹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了君账。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片繁堡。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乡数,靈堂內(nèi)的尸體忽然破棺而出椭蹄,到底是詐尸還是另有隱情,我是刑警寧澤净赴,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布绳矩,位于F島的核電站,受9級特大地震影響玖翅,放射性物質(zhì)發(fā)生泄漏翼馆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一金度、第九天 我趴在偏房一處隱蔽的房頂上張望写妥。 院中可真熱鬧,春花似錦审姓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至莱找,卻和暖如春酬姆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奥溺。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工辞色, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浮定。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓相满,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桦卒。 傳聞我的和親對象是個殘疾皇子立美,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容