偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

搜索引擎告訴你如何大海撈針

開發(fā) 前端
這個只是搜索的操作,搜索引擎還有另一個重要的組成部分 —— 排序,對于搜索出的結(jié)果如何將用戶最需要的、最相關(guān)的排在最前面也是技術(shù)含量很高的操作,后續(xù)有機會繼續(xù)分享一下。

?如果問你這個問題:

像搜索引擎這樣的全文搜索底層原理到底是什么?

對于有經(jīng)驗的人來說,很輕松的就能回答這個問題。因為現(xiàn)代的搜索引擎基本都是采用倒排索引來實現(xiàn)的。那什么是倒排索引呢?

建立倒排索引

有的同學(xué)看到「倒排」兩個字可能有點慌。

我知道你很急,但你先別急(bushi)

這個不是「倒排需求」的倒排,而是「倒排索引」的倒排。假設(shè)我們現(xiàn)在有 3 個網(wǎng)頁,包含了如下很簡單的內(nèi)容:

圖片

三個文檔

現(xiàn)在假設(shè)我們要對網(wǎng)頁中的內(nèi)容進行搜索,第一步需要做什么呢?當(dāng)然是建立索引,沒有索引你還想大海撈針?想 peach,相信大家對索引應(yīng)該不陌生,大家平時看書時看到的目錄,是一種索引,MySQL 當(dāng)中的聚簇索引和非聚簇索引也是一種索引。

廢話不多說,直接看人肉手動分詞 + 建立道倒排索引之后的結(jié)果:

圖片

對三個文檔簡歷好索引之后的效果

假設(shè)現(xiàn)在要搜索 jump 這個詞,那么最終就會把網(wǎng)頁 1、2 展示給你,因為 jump 在兩個網(wǎng)頁中都出現(xiàn)過。這就是很簡單的一個倒排索引的例子。

搜索連續(xù)的詞怎么辦?

可能大家還沒有意識到這個問題在哪里,我們舉個例子來看看。在搜索引擎里搜索的時候,我們輸入 i jump? 和 "i jump"? 是不同的概念。前者代表包含了 i? 和 jump? 兩個詞的網(wǎng)頁,后者代表了單詞 i?  后緊跟 jump? 的網(wǎng)頁。例如,搜索 i jump? 預(yù)期會把上面 3 個網(wǎng)頁全部搜索出來,而搜索 "i jump" 則只會搜索出網(wǎng)頁 3.

此時我們思考一個問題,搜索引擎是如何實現(xiàn)上面功能的呢?在上面的索引表中,只有哪些詞出現(xiàn)在了哪些網(wǎng)頁當(dāng)中,卻并沒有詞語位置的相關(guān)信息。

所以,只記錄詞語出現(xiàn)在哪些網(wǎng)頁中是遠遠不夠的。為了滿足上面精確到詞語位置的查詢需求,讓我們把詞語的位置也一起寫入到索引中,如下所示:

圖片

將詞語的位置加入到倒排索引當(dāng)中

這樣以來,當(dāng)我們搜索 "i jump" 時,我們就能夠通過索引中記錄的位置來搜索相鄰的詞語,如下圖所示:

圖片

根據(jù)有位置記錄的索引來搜索相鄰的詞語

詞語 I? 在 3-3? 的位置,而 jump? 在 3-4,由此就可以推斷,這兩個詞在同一個網(wǎng)頁的相鄰的位置了。

只搜索標(biāo)題的內(nèi)容怎么辦?

現(xiàn)在 Google 是支持這種搜索的,查詢的格式如下:intitle:${search_content},大家可以去嘗試一下。

那這個到底是怎么實現(xiàn)的呢?

很顯然上面的索引是無法滿足只搜標(biāo)題這個需求的,因為它無法判斷當(dāng)前這個詞是標(biāo)題還是正文,那這個到底是怎么實現(xiàn)的?

首先,我們得知道如何標(biāo)識「標(biāo)題」。如果我們在現(xiàn)在的網(wǎng)友上右鍵,選擇查看源代碼,你就會看到 HTML,這才是網(wǎng)頁的“真面目。網(wǎng)頁的標(biāo)題會用 <title></title>? 標(biāo)簽給包裹起來,而正文會用 <body></body> 標(biāo)簽給包裹起來,那比如我們現(xiàn)在給上面的 3 個網(wǎng)頁加上 title 標(biāo)簽,那么網(wǎng)頁就會變成這樣:

圖片

帶 title body 標(biāo)簽的 HTML 網(wǎng)頁

既然網(wǎng)頁的內(nèi)容發(fā)生了“變更”(實際上沒有,因為它本來就應(yīng)該長這樣,只不過為了滿足循序漸進的講解才這么說),那么索引也自然需要更新一下。因為本質(zhì)上我們需要知道哪些詞是標(biāo)題,那么新增了這部分信息的索引就如下所示:

圖片

添加了標(biāo)題信息的倒排索引

可以看到,標(biāo)題的文本、以及標(biāo)識標(biāo)題的標(biāo)簽都被寫入了索引,通過這些信息我們就能夠判斷當(dāng)前的詞是否是標(biāo)題。比如舉個例子,我們搜索 intitle:Caesar?,這個時候首先會通過索引找到詞語 Caesar?,發(fā)現(xiàn)它只出現(xiàn)在網(wǎng)頁 2 的位置 2,那么我們再對比 <title>?  和 </title>? 出現(xiàn)的位置我們會發(fā)現(xiàn),2-2 剛好在標(biāo)題的范圍內(nèi):

圖片

通過標(biāo)題位置的索引來只搜索標(biāo)題

這樣以來,我們就能夠?qū)⑺阉鞯姆秶拗圃跇?biāo)題內(nèi)了。

當(dāng)然,這個只是搜索的操作,搜索引擎還有另一個重要的組成部分 —— 排序,對于搜索出的結(jié)果如何將用戶最需要的、最相關(guān)的排在最前面也是技術(shù)含量很高的操作,后續(xù)有機會繼續(xù)分享一下。

責(zé)任編輯:武曉燕 來源: SH的全棧筆記
相關(guān)推薦

2023-02-08 10:45:23

2009-04-29 11:45:31

Java面試主考官

2022-10-08 09:13:18

搜索引擎?站

2016-07-18 10:48:16

華為

2024-04-02 09:23:04

測試開源

2024-04-22 12:57:47

2022-11-10 16:08:13

程序員代碼

2011-06-20 18:23:06

SEO

2021-07-12 14:20:09

SQL數(shù)據(jù)庫異常檢測

2009-07-30 10:40:56

搜索引擎優(yōu)化網(wǎng)站

2024-10-09 13:22:10

2025-02-28 01:00:00

2020-03-20 10:14:49

搜索引擎倒排索引

2022-03-31 20:15:21

圖像搜索引擎

2017-08-07 08:15:31

搜索引擎倒排

2015-08-31 10:41:58

搜索引擎Google云應(yīng)用

2009-02-19 09:41:36

搜索引擎搜狐百度

2010-04-20 11:43:46

點贊
收藏

51CTO技術(shù)棧公眾號