很多搜尋引擎都是基於倒排索引,比如luncene,solr以及elasticsearch
聊倒排搜尋之前先來看看正排索引,正排其實就是資料庫表,他通過id和資料進行關聯,如下:
資料id
資料內容
1001
蘋果公司發布iphone
1002
地球引力起源於蘋果
1003
iphone螢幕碎了
1004
我在蘋果商店維修螢幕
1005
我剛剛吃了蘋果
我們可以通過搜尋id,來獲得相應的資料,也能刪除資料。你買了一本書,書的目錄其實也是正排搜尋。
假設現在我要搜蘋果
倆字,那麼他會對這張**中每一行的資料做匹配,去查詢一下,是否包含蘋果
這兩個字,從第一條匹配到最後一條,如果一張表中資料量不多,幾萬,十幾萬,那麼問題不大,但是一旦資料量有上百萬,上千萬,那麼全表掃瞄這種的搜尋效能就會有影響。
其次,這個時候我想搜尋蘋果iphone
,那麼我們無法把這詞彙拆開再到資料庫去搜尋。
與正排是反著來的,他會把文件內容進行分詞,比如蘋果公司發布iphone
是乙個文件資料,當我們把他存入到搜尋引擎中去的時候,會有乙個文件id,這個文件id就類似於資料庫主鍵。但是這文件儲存的時候和資料庫不一樣,他會進行乙個分詞,參照上面的**,分詞後的結果如下:
文件資料
分詞結果
蘋果公司發布iphone
蘋果,公司,發布,iphone
地球引力起源於蘋果
地球,引力,起源,於,蘋果
iphone螢幕碎了
iphone,螢幕,碎了
我在蘋果商店維修螢幕
我,在,蘋果,商店,維修,螢幕
我剛剛吃了蘋果
我,剛剛,吃了,蘋果
每乙個詞彙都會和文件id關聯起來,可以根據詞彙來找到所有出現的id列表,如下:
詞彙文件ids
蘋果1001,1002,1004,1005
iphone
1001,1003
公司1001
發布1001
地球1001
引力1001
起源1001
於1001
螢幕1003,1004
碎了1003
我1004,1005
在1004
商店1004
維修1004
剛剛1005
吃了1005
假設現在我要搜尋iphone
,如果是資料庫搜尋,假設有1億條資料,那麼會匹配1億次,全表掃瞄。最後再把資料返回出來。
如果是搜尋引擎,那麼有可能第一次就把所有文件資料給查出來,當然也有可能是第n次,當然他肯定要比資料庫的搜尋效率更高。如圖中位置,他會直接把1001,1003
兩個文件返回。
振動測試大白話(一) 大白話解釋啥是衝擊響應譜
摘要 有的振動測試行業同行除了要測試結果,也願意交流一下計算的過程,涉及到的計算知識比較多,有的也難以理解。為了讓大家盡可能簡單地理解這些概念,今天開始就逐步分享一些大白話振動測試知識。本篇講衝擊響應譜。於網路 為了檢驗可靠性,很多產品需要做衝擊實驗。對於易於實現的實驗,可以用真實工況或簡單的實驗裝...
什麼是單頁面應用(SPA)?大白話介紹
什麼是單頁應用?單頁面應用的優缺點 優點 1 使用者操作體驗好,使用者不用重新整理頁面,整個互動過程都是通過ajax來操作。2 適合前後端分離開發,服務端提供http介面,前端請求http介面獲取資料,使用js進行客戶端渲染。缺點 1 首頁載入慢 單頁面應用會將js css打包成乙個檔案,在載入頁面...
大白話解釋什麼是集群 舉生活中最通俗易懂的案例
舉列場景 招商銀行辦理業務 2019年04月29號,招商銀行門口來了30個人辦理業務 此時,招商銀行的櫃檯只有乙個視窗,乙個銀行職員,然後該視窗裡的銀行職員就開始給這30個客戶辦理業務,2個小時過去了,該視窗的銀行職員只給5個客戶辦完了業務,還有25個客戶還在排隊焦急的等待著。乙個視窗就是單機 單個...