新聞中心
?如果問(wèn)你這個(gè)問(wèn)題:

成都創(chuàng)新互聯(lián)是一家專業(yè)提供鄭州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為鄭州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
像搜索引擎這樣的全文搜索底層原理到底是什么?
對(duì)于有經(jīng)驗(yàn)的人來(lái)說(shuō),很輕松的就能回答這個(gè)問(wèn)題。因?yàn)楝F(xiàn)代的搜索引擎基本都是采用倒排索引來(lái)實(shí)現(xiàn)的。那什么是倒排索引呢?
建立倒排索引
有的同學(xué)看到「倒排」兩個(gè)字可能有點(diǎn)慌。
我知道你很急,但你先別急(bushi)
這個(gè)不是「倒排需求」的倒排,而是「倒排索引」的倒排。假設(shè)我們現(xiàn)在有 3 個(gè)網(wǎng)頁(yè),包含了如下很簡(jiǎn)單的內(nèi)容:
三個(gè)文檔
現(xiàn)在假設(shè)我們要對(duì)網(wǎng)頁(yè)中的內(nèi)容進(jìn)行搜索,第一步需要做什么呢?當(dāng)然是建立索引,沒(méi)有索引你還想大海撈針?想 peach,相信大家對(duì)索引應(yīng)該不陌生,大家平時(shí)看書(shū)時(shí)看到的目錄,是一種索引,MySQL 當(dāng)中的聚簇索引和非聚簇索引也是一種索引。
廢話不多說(shuō),直接看人肉手動(dòng)分詞 + 建立道倒排索引之后的結(jié)果:
對(duì)三個(gè)文檔簡(jiǎn)歷好索引之后的效果
假設(shè)現(xiàn)在要搜索 jump 這個(gè)詞,那么最終就會(huì)把網(wǎng)頁(yè) 1、2 展示給你,因?yàn)?jump 在兩個(gè)網(wǎng)頁(yè)中都出現(xiàn)過(guò)。這就是很簡(jiǎn)單的一個(gè)倒排索引的例子。
搜索連續(xù)的詞怎么辦?
可能大家還沒(méi)有意識(shí)到這個(gè)問(wèn)題在哪里,我們舉個(gè)例子來(lái)看看。在搜索引擎里搜索的時(shí)候,我們輸入 i jump? 和 "i jump"? 是不同的概念。前者代表包含了 i? 和 jump? 兩個(gè)詞的網(wǎng)頁(yè),后者代表了單詞 i? 后緊跟 jump? 的網(wǎng)頁(yè)。例如,搜索 i jump? 預(yù)期會(huì)把上面 3 個(gè)網(wǎng)頁(yè)全部搜索出來(lái),而搜索 "i jump" 則只會(huì)搜索出網(wǎng)頁(yè) 3.
此時(shí)我們思考一個(gè)問(wèn)題,搜索引擎是如何實(shí)現(xiàn)上面功能的呢?在上面的索引表中,只有哪些詞出現(xiàn)在了哪些網(wǎng)頁(yè)當(dāng)中,卻并沒(méi)有詞語(yǔ)位置的相關(guān)信息。
所以,只記錄詞語(yǔ)出現(xiàn)在哪些網(wǎng)頁(yè)中是遠(yuǎn)遠(yuǎn)不夠的。為了滿足上面精確到詞語(yǔ)位置的查詢需求,讓我們把詞語(yǔ)的位置也一起寫(xiě)入到索引中,如下所示:
將詞語(yǔ)的位置加入到倒排索引當(dāng)中
這樣以來(lái),當(dāng)我們搜索 "i jump" 時(shí),我們就能夠通過(guò)索引中記錄的位置來(lái)搜索相鄰的詞語(yǔ),如下圖所示:
根據(jù)有位置記錄的索引來(lái)搜索相鄰的詞語(yǔ)
詞語(yǔ) I? 在 3-3? 的位置,而 jump? 在 3-4,由此就可以推斷,這兩個(gè)詞在同一個(gè)網(wǎng)頁(yè)的相鄰的位置了。
只搜索標(biāo)題的內(nèi)容怎么辦?
現(xiàn)在 Google 是支持這種搜索的,查詢的格式如下:intitle:${search_content},大家可以去嘗試一下。
那這個(gè)到底是怎么實(shí)現(xiàn)的呢?
很顯然上面的索引是無(wú)法滿足只搜標(biāo)題這個(gè)需求的,因?yàn)樗鼰o(wú)法判斷當(dāng)前這個(gè)詞是標(biāo)題還是正文,那這個(gè)到底是怎么實(shí)現(xiàn)的?
首先,我們得知道如何標(biāo)識(shí)「標(biāo)題」。如果我們?cè)诂F(xiàn)在的網(wǎng)友上右鍵,選擇查看源代碼,你就會(huì)看到 HTML,這才是網(wǎng)頁(yè)的“真面目。網(wǎng)頁(yè)的標(biāo)題會(huì)用
帶 title body 標(biāo)簽的 HTML 網(wǎng)頁(yè)
既然網(wǎng)頁(yè)的內(nèi)容發(fā)生了“變更”(實(shí)際上沒(méi)有,因?yàn)樗緛?lái)就應(yīng)該長(zhǎng)這樣,只不過(guò)為了滿足循序漸進(jìn)的講解才這么說(shuō)),那么索引也自然需要更新一下。因?yàn)楸举|(zhì)上我們需要知道哪些詞是標(biāo)題,那么新增了這部分信息的索引就如下所示:
添加了標(biāo)題信息的倒排索引
可以看到,標(biāo)題的文本、以及標(biāo)識(shí)標(biāo)題的標(biāo)簽都被寫(xiě)入了索引,通過(guò)這些信息我們就能夠判斷當(dāng)前的詞是否是標(biāo)題。比如舉個(gè)例子,我們搜索 intitle:Caesar?,這個(gè)時(shí)候首先會(huì)通過(guò)索引找到詞語(yǔ) Caesar?,發(fā)現(xiàn)它只出現(xiàn)在網(wǎng)頁(yè) 2 的位置 2,那么我們?cè)賹?duì)比
通過(guò)標(biāo)題位置的索引來(lái)只搜索標(biāo)題
這樣以來(lái),我們就能夠?qū)⑺阉鞯姆秶拗圃跇?biāo)題內(nèi)了。
當(dāng)然,這個(gè)只是搜索的操作,搜索引擎還有另一個(gè)重要的組成部分 —— 排序,對(duì)于搜索出的結(jié)果如何將用戶最需要的、最相關(guān)的排在最前面也是技術(shù)含量很高的操作,后續(xù)有機(jī)會(huì)繼續(xù)分享一下。
新聞名稱:搜索引擎告訴你如何大海撈針
網(wǎng)站地址:http://www.5511xx.com/article/dpceedd.html


咨詢
建站咨詢
