通常的儲存方式:
乙個未經處理的資料庫中,一般是以文件id作為索引,以文件內容作為記錄。
lucene是基於倒排索引實現的。
(英語:inverted index) 特點適合快速的全文檢索
乙個倒排索引由文件中所有不重複詞的列表構成,對於其中每個詞,有乙個包含它的文件列表。
也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來儲存在全文搜尋下某個單詞在乙個文件或者一組文件中的儲存位置的對映。
單詞詞典」和「倒排檔案」
倒排檔案
所有單詞的倒排列表順序的儲存在磁碟的某個檔案裡,這個檔案即被稱為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。
單詞詞典
單詞詞典是由文件集合中出現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向「倒排列表」的指標。
單詞詞典是倒排索引中非常重要的組成部分,它是用來維護文件集合中所有單詞的相關資訊,同時用來記載某個單詞對應的倒排列表在倒排檔案中的位置資訊。在支援搜尋時,根據使用者的查詢詞,去單詞詞典裡查詢,就能夠獲得相應的倒排列表。
對於乙個規模很大的文件集合來說,可能包含了幾十萬甚至上百萬的不同單詞,
快速定位某個單詞直接決定搜尋的響應速度,所以我們需要很高效的資料結構對單詞詞典進行構建和查詢。
常用的資料結構包含雜湊加鍊表和樹形詞典結構。
而inverted index 指的是將單詞或記錄作為索引,將文件id作為記錄,這樣便可以方便地通過單詞或記錄查詢到其所在的文件。
一條記錄的水平反向索引(或者反向檔案索引)包含每個引用單詞的文件的列表。
乙個單詞的水平反向索引(或者完全反向索引)又包含每個單詞在乙個文件中的位置。
現代搜尋引擎的索引[3] 都是基於倒排索引。相比「簽名檔案」、「字尾樹」等索引結構,「倒排索引」是實現單詞到文件對映關係的最佳實現方式和最有效的索引結構.
** 根據屬性來查詢記錄
倒排索引檔案
構建方法:使用hash去重
在資料庫中可以根據索引查詢記錄
但不滿足與搜尋引擎
比如:
(1) 海量資料
(2)資料操作簡單
用來記錄那些文章包含那些字
tocid tf posting dcap
實際中儲存的是d-gap
之所以要對文件編號進行差值計算,主要原因是為了更好地對資料進行壓縮,原始文件編號一般都是大數值,通過差值計算,就有效地將大數值轉換為了小數值,而這有助於增加資料的壓縮率。
構建方式:
簡單方法
hash去重
倒排列表就是文件編號docid,沒有包含其他的資訊(如詞頻,單詞位置等),這就是簡單的索引。
這個簡單索引功能可以用於小資料,例如索引幾千個文件。
然而它有兩點限制:
1)需要有足夠的記憶體來儲存倒排表,對於搜尋引擎來說, 都是g級別資料,特別是當規模不斷擴大時 ,我們根本不可能提供這麼多的記憶體。
2)演算法是順序執行,不便於並行處理。
合併法:
更新的四種策略
完全重建策略
再合併策略
原地更新策略
混合策略
倒排索引建立索引的流程:
1) 首先把所有的原始資料進行編號,形成文件列表
2) 把文件資料進行分詞,得到很多的詞條,以詞條為索引。儲存包含這些詞條的文件的編號資訊。
當多條記錄都匹配時會根據匹配度排序
我們目前的倒排索引
quick 和quick
fox 和foxes
jumped和leap
而用普通的順序匹配演算法,不建索引,而是對所有文章的內容進行字串匹配,這個過程將會相當緩慢,當文章數目很大時,時間往往是無法忍受的。
關於索引壓縮演算法
eilas gamma演算法
eilas delta演算法
golomb演算法a
rice演算法
變長位元組演算法
******x演算法
pfordelta演算法
關於倒排索引
今天讀到關於倒排索引的乙個超級棒的部落格,忍不住複製了過來。單詞 文件矩陣是表達兩者之間所具有的一種包含關係的概念模型,圖3 1展示了其含義。圖3 1的每列代表乙個文件,每行代表乙個單詞,打對勾的位置代表包含關係。圖3 1 單詞 文件矩陣 從縱向即文件這個維度來看,每列代表文件包含了哪些單詞,比如文...
ElasticSearch關於倒排索引
在我們說倒排索引的時候讓我們先去了解一下什麼叫做正排索引 在說倒排索引之前我們先說說什麼是正排索引。正排索引也稱為 前向索引 它是建立倒排索引的基礎。這種組織方法在建立索引的時候結構比較簡單,建立比較方便且易於維護 因為索引是基於文件建立的,若是有新的文件加入,直接為該文件建立乙個新的索引塊,掛接在...
關於倒排索引表的總結
最近在研究elasticsearch的技術棧 發現es底層是基於luence技術進行檢索,檢索的原理是倒排索引表。那麼什麼是倒排索引表呢?在知乎上看到乙個講解elasticsearch的倒排索引表的帖子。為什麼說elasticsearch的倒排索引表的檢索速度是比關係型資料庫的索引查新更快呢?首先,...