ES 倒排索引

2021-10-25 20:17:36 字數 1157 閱讀 2802

【前言】

elasticsearch是通過 lucene 的倒排索引技術實現比關係型資料庫更快的過濾。特別是它對多條件的過濾支援非常好,比如年齡在 18 和 30 之間,性別為女性這樣的組合查詢。倒排索引很多地方都有介紹,但是其比關係型資料庫的 b-tree 索引快在**?到底為什麼快呢?

籠統的來說,b-tree 索引是為寫入優化的索引結構。當我們不需要支援快速的更新的時候,可以用預先排序等方式換取更小的儲存空間,更快的檢索速度等好處,其代價就是更新慢。要進一步深入的化,還是要看一下 lucene 的倒排索引是怎麼構成的。

【正文】

es中的索引在這裡就不多講了,相當於傳統資料庫的表一樣

倒排索引(inverted index):每個文件都對應乙個id,倒排索引會按照指定語法對每乙個文件進行分詞,然後維護一張表,列舉所有文件**現的terms以及它們出現的文件id和出現頻率,它是實現"單詞-文件矩陣"的一種具體儲存形式。倒排索引主要由兩部分組成:「單詞詞典"+"倒排檔案」。

簡單的來講:正序索引是根據key找value,而倒序索引是根據value找key。

二者區別的示意圖

正序索引

倒序索引

單詞詞典(lexicon):單詞詞典是由文件集合**現過的所有單詞構成的字串集合,單詞詞典內每條索引項記載單詞本身的一些資訊以及指向"倒排列表"的指標。

倒排列表(postinglist):倒排列表記載了出現過某個單詞的所有文件的文件列表及單詞在該文件**現的位置資訊,每條記錄稱為乙個倒排項。

倒排檔案(inverted file):所有單詞的倒排列表往往順序地儲存在磁碟的某個檔案裡,這個檔案被稱之為倒排檔案,倒排檔案是儲存倒排索引的物理檔案。

ES倒排索引原理與實現過程 建立倒排索引的步驟

提取詞項 首先對文件進行分詞,英文文件使用空格分隔。去掉沒有實際意義的詞,如is a in as等 大小寫轉換,使用關鍵字elasticsearch 能把elasticsearch 和elasticsearch都查詢出來,因此所有的單詞統一大小寫。單 複數,過去式 進行時等進行轉換,如希望使用ind...

倒排索引 和 倒排表

為什麼我們要說倒排索引呢?因為倒排索引是目前 搜尋引擎公司最對搜尋引擎最常用的儲存方式.也是搜尋引擎的核心內容 在搜尋引擎實際的引用之中,有時需要按照關鍵字的某些值查詢記錄,所以我們是按照關鍵字建立索引,這個索引我們就稱之為 倒排索引,而帶有倒排索引的檔案我們又稱作 倒排索引檔案也可以叫它為 倒排檔...

倒排索引 Inverted Index

倒排索引 英語 inverted index 也常被稱為反向索引 置入檔案或反向檔案,是一種索引方法,被用來儲存在全文搜尋下某個單詞在乙個文件或者一組文件中的儲存位置的對映。它是文件檢索系統中最常用的資料結構。有兩種不同的反向索引形式 以英文為例,下面是要被索引的文字 我們就能得到下面的反向檔案索引...