很多搜尋引擎都是基於倒排索引,比如luncene,solr以及elasticsearch。
英文原名inverted index,大概因為 invert 有顛倒的意思,就被翻譯成了倒排。但是倒排這個名稱很容易讓人理解為從a-z顛倒成z-a。聊倒排搜尋之前先來看看正排索引,正排其實就是資料庫表,他通過id和資料進行關聯,如下:乙個未經處理的資料庫中,一般是以文件id作為索引,以文件內容作為記錄。
而inverted index 指的是將單詞或記錄作為索引,將文件id作為記錄,這樣便可以方便地通過單詞或記錄查詢到其所在的文件。
資料id
資料內容
1001
蘋果公司發布iphone
1002
地球引力起源於蘋果
1003
iphone螢幕碎了
1004
我在蘋果商店維修螢幕
1005
我剛剛吃了蘋果
我們可以通過搜尋id,來獲得相應的資料,也能刪除資料。你買了一本書,書的目錄其實也是正排搜尋。
假設現在我要搜 「蘋果」 倆字,那麼他會對這張**中每一行的資料做匹配,去查詢一下,是否包含 「蘋果」 這兩個字,從第一條匹配到最後一條,如果一張表中資料量不多,幾萬,十幾萬,那麼問題不大,但是一旦資料量有上百萬,上千萬,那麼全表掃瞄這種的搜尋效能就會有影響。
其次,這個時候我想搜尋 「蘋果iphone」,那麼我們無法把這詞彙拆開再到資料庫去搜尋。
與正排是反著來的,他會把文件內容進行分詞,比如蘋果公司發布iphone
是乙個文件資料,當我們把他存入到搜尋引擎中去的時候,會有乙個文件id,這個文件id就類似於資料庫主鍵。但是這文件儲存的時候和資料庫不一樣,他會進行乙個分詞,參照上面的**,分詞後的結果如下:
資料id
文件資料
分詞結果
1001
蘋果公司發布iphone
蘋果,公司,發布,iphone
1002
地球引力起源於蘋果
地球,引力,起源,於,蘋果
1003
iphone螢幕碎了
iphone,螢幕,碎了
1004
我在蘋果商店維修螢幕
我,在,蘋果,商店,維修,螢幕
1005
我剛剛吃了蘋果
我,剛剛,吃了,蘋果
每乙個詞彙都會和文件id關聯起來,可以根據詞彙來找到所有出現的id列表,如下:
詞彙文件ids
蘋果1001,1002,1004,1005
iphone
1001,1003
公司1001
發布地球1001
引力1001
起源1001
於1001
螢幕1003,1004
碎了1003
我1004,1005
在1004
商店1004
維修1004
剛剛1005
吃了1005
假設現在我要搜尋iphone
,如果是資料庫搜尋,假設有1億條資料,那麼會匹配1億次,全表掃瞄。最後再把資料返回出來。
如果是搜尋引擎,那麼有可能第一次就把所有文件資料給查出來,當然也有可能是第n次,當然他肯定要比資料庫的搜尋效率更高。如圖中位置,他會直接把1001,1003
兩個文件返回。
參考:倒排索引為什麼叫倒排索引? - 耗子的回答 - 知乎
大白話告訴你倒排索引是個啥 - 風間影月的文章 - 知乎
倒排索引 和 倒排表
為什麼我們要說倒排索引呢?因為倒排索引是目前 搜尋引擎公司最對搜尋引擎最常用的儲存方式.也是搜尋引擎的核心內容 在搜尋引擎實際的引用之中,有時需要按照關鍵字的某些值查詢記錄,所以我們是按照關鍵字建立索引,這個索引我們就稱之為 倒排索引,而帶有倒排索引的檔案我們又稱作 倒排索引檔案也可以叫它為 倒排檔...
倒排索引 Inverted Index
倒排索引 英語 inverted index 也常被稱為反向索引 置入檔案或反向檔案,是一種索引方法,被用來儲存在全文搜尋下某個單詞在乙個文件或者一組文件中的儲存位置的對映。它是文件檢索系統中最常用的資料結構。有兩種不同的反向索引形式 以英文為例,下面是要被索引的文字 我們就能得到下面的反向檔案索引...
1 倒排索引
總時間限制 1000ms 記憶體限制 131072kb 描述 給定一些文件,要求求出某些單詞的倒排表。對於乙個單詞,它的倒排表的內容為出現這個單詞的文件編號。輸入第一行包含乙個數n,1 n 1000,表示文件數。接下來n行,每行第乙個數c i,表示第i個文件的單詞數。接下來跟著c i個用空格隔開的單...