簡單理解 倒排索引

2021-08-31 16:12:23 字數 2256 閱讀 2349

對初步了解es挺好的。

elasticsearch使用一種叫做倒排索引(inverted index)的結構來做快速的全文搜尋。倒排索引由在文件中出現的唯一的單詞列表,以及對於每個單詞在文件中的位置組成。

例如,我們有兩個文件,每個文件content字段包含:

the quick brown fox jumped over the lazy dog

quick brown foxes leap over lazy dogs in summer

為了建立倒排索引,我們首先切分每個文件的content欄位為單獨的單詞(我們把它們叫做詞(terms)或者表徵(tokens))(譯者注:關於termstokens的翻譯比較生硬,只需知道語句分詞後的個體叫做這兩個。),把所有的唯一詞放入列表並排序,結果是這個樣子的:

term

doc_1

doc_2

quick

xthe

xbrownxx

dogx

dogs

xfox

xfoxesxin

xjumped

xlazyxx

leap

xoverxx

quick

xsummer

xthe

x現在,如果我們想搜尋"quick brown",我們只需要找到每個詞在哪個文件中出現即可:

term

doc_1

doc_2

brownxx

quick

x-----

-------

-----

total21

兩個文件都匹配,但是第乙個比第二個有更多的匹配項。 如果我們加入簡單的相似度演算法(similarity algorithm),計算匹配單詞的數目,這樣我們就可以說第乙個文件比第二個匹配度更高——對於我們的查詢具有更多相關性。

但是在我們的倒排索引中還有些問題:

"quick""quick"被認為是不同的單詞,但是使用者可能認為它們是相同的。

"fox""foxes"很相似,就像"dog""dogs"——它們都是同根詞。

"jumped""leap"不是同根詞,但意思相似——它們是同義詞。

上面的索引中,搜尋"+quick +fox"不會匹配任何文件(記住,字首+表示單詞必須匹配到)。只有"quick""fox"都在同一文件中才可以匹配查詢,但是第乙個文件包含"quick fox"且第二個文件包含"quick foxes"。(譯者注:這段真囉嗦,說白了就是單複數和同義詞沒法匹配)

使用者可以合理地希望兩個文件都能匹配查詢,我們也可以做得更好。

如果我們將詞為統一為標準格式,這樣就可以找到不是確切匹配查詢,但是足以相似從而可以關聯的文件。例如:

"quick"可以轉為小寫成為"quick"

"foxes"可以被轉為根形式"fox"。同理"dogs"可以被轉為"dog"

"jumped""leap"同義就可以只索引為單個詞"jump"

現在的索引:

term

doc_1

doc_2

brownxx

dogx

xfo***

inxjumpxx

lazyxx

overxx

quickxx

summer

xthexx

但我們還未成功。我們的搜尋"+quick +fox"依舊失敗,因為"quick"的確切值已經不在索引裡,不過,如果我們使用相同的標準化規則處理查詢字串的content字段,查詢將變成"+quick +fox",這樣就可以匹配到兩個文件。

MapReduce倒排索引簡單實現

倒排索引 倒排索引是文件檢索系統中最常用的資料結構,被廣泛的應用於全文搜尋引擎。它主要用來儲存某個單詞 或片語 在乙個文件或一組文件中的儲存位置的對映,即提供了一種根據內容來查詢文件的方式,由於不是根據文件來確定文件所包含的內容,而是進行了相反的操作,因而被稱為倒排索引。例如 input 輸入有三個...

正排索引和倒排索引簡單介紹

在搜尋引擎中,資料被爬取後,就會建立index,方便檢索。在工作中經常會聽到有人問,你這個index是正排的還是倒排的?那麼什麼是正排呢?什麼又是倒排呢?下面是一些簡單的介紹。網頁a中的內容片段 tom is a boy.tom is a student too.網頁b中的內容片段 jon work...

正排索引和倒排索引理解詳解

叮嘟!這裡是小啊嗚的學習課程資料整理。好記性不如爛筆頭,今天也是努力進步的一天。一起加油高階吧!文件 單詞1 單詞2 單詞1 出現的次數 單詞出現的位置 單詞2 單詞2出現的位置 正排索引 在搜尋欄輸入id查詞條 已知id 單詞1 文件1 文件2,文件3 單詞2 文件1,文件2 倒排索引 將搜尋框中...