日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

深入搜索引擎原理 搜索引擎其實也是一個什么系統(tǒng)

之前幾段工作經(jīng)歷都與搜索有關(guān),現(xiàn)在也有業(yè)務(wù)在用搜索,對搜索引擎做一個原理性的分享,包括搜索的一系列核心數(shù)據(jù)結(jié)構(gòu)和算法,盡量覆蓋搜索引擎的核心原理,但不涉及數(shù)據(jù)挖掘、NLP等 。文章有點長,多多指點~~
一、搜索引擎引題搜索引擎是什么?
這里有個概念需要提一下 。信息檢索 (Information Retrieval 簡稱 IR) 和 搜索 (Search) 是有區(qū)別的,信息檢索是一門學(xué)科,研究信息的獲取、表示、存儲、組織和訪問,而搜索只是信息檢索的一個分支,其他的如問答系統(tǒng)、信息抽取、信息過濾也可以是信息檢索 。
本文要講的搜索引擎,是通常意義上的全文搜索引擎、垂直搜索引擎的普遍原理,比如 Google、Baidu,天貓搜索商品、口碑搜索美食、飛豬搜索酒店等 。
Lucene 是非常出名且高效的全文檢索工具包,ES 和 Solr 底層都是使用的 Lucene,本文的大部分原理和算法都會以 Lucene 來舉例介紹 。
為什么需要搜索引擎?看一個實際的例子:如何從一個億級數(shù)據(jù)的商品表里,尋找名字含“秋褲”的 商品 。
使用SQL Like
select * from item where name like '%秋褲%'如上,大家第一能想到的實現(xiàn)是用 like,但這無法使用上索引,會在大量數(shù)據(jù)集上做一次遍歷操作,查詢會非常的慢 。有沒有更簡單的方法呢,可能會說能不能加個秋褲的分類或者標簽,很好,那如果新增一個商品品類怎么辦呢?要加無數(shù)個分類和標簽嗎?如何能更簡單高效的處理全文檢索呢?
使用搜索引擎

深入搜索引擎原理 搜索引擎其實也是一個什么系統(tǒng)


答案是搜索,會事先 build 一個倒排索引,通過詞法語法分析、分詞、構(gòu)建詞典、構(gòu)建倒排表、壓縮優(yōu)化等操作構(gòu)建一個索引,查詢時通過詞典能快速拿到結(jié)果 。這既能解決全文檢索的問題,又能解決了SQL查詢速度慢的問題 。
那么,淘寶是如何在1毫秒從上億個商品找到上千種秋褲的呢,谷歌如何在1毫秒從萬億個網(wǎng)頁中找尋到與你關(guān)鍵字匹配的幾十萬個網(wǎng)頁,如此大的數(shù)據(jù)量是怎么做到毫秒返回的 。
二、搜索引擎是怎么做的?Part1. 分詞
分詞就是對一段文本,通過規(guī)則或者算法分出多個詞,每個詞作為搜索的最細粒度一個個單字或者單詞 。只有分詞后有這個詞,搜索才能搜到,分詞的正確性非常重要 。分詞粒度太大,搜索召回率就會偏低,分詞粒度太小,準確率就會降低 。如何恰到好處的分詞,是搜索引擎需要做的第一步 。
正確性&粒度
  • 分詞正確性
  • “他說的確實在理”,這句話如何分詞?
  • “他-說-的確-實在-理” [錯誤語義]
  • “他-說-的-確實-在理” [正確語義]
  • 分詞的粒度
  • “中華人民共和國憲法”,這句話如何分詞?
  • “中華人民共和國-憲法”,[搜索 中華、共和國 無結(jié)果]
  • “中華-人民-共和國-憲法”,[搜索 共和 無結(jié)果]
  • “中-華-人-民-共-和-國-憲-法”,[搜索其中任意字都有結(jié)果]
分詞的粒度并不是越小越好,他會降低準確率,比如搜索 “中秋” 也會出現(xiàn)上條結(jié)果,而且粒度越小,索引詞典越大,搜索效率也會下降,后面會細說 。
如何準確的把控分詞,涉及到 NLP 的內(nèi)容啦,這里就不展開了 。
停用詞
很多語句中的詞都是沒有意義的,比如 “的”,“在” 等副詞、謂詞,英文中的 “a”,“an”,“the”,在搜索是無任何意義的,所以在分詞構(gòu)建索引時都會去除,降低不不要的索引空間,叫停用詞 (StopWord) 。

推薦閱讀