Elasticsearch( )倒排索引

2021-09-22 01:29:03 字數 2369 閱讀 9448

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",這樣就可以匹配到兩個文件。

這很重要。你只可以找到確實存在於索引中的詞,所以索引文字和查詢字串都要標準化為相同的形式

這個標記化和標準化的過程叫做分詞(analysis)

Elasticsearch 倒排索引

elasticsearch 使用一種稱為倒排索引的結構,它適用於快速的全文搜尋。乙個倒排索引由文件中所有不重複詞的列表構成,對於其中每個詞,有乙個包含它的文件列表。假設我們有兩個文件,每個文件的 content 域包含如下內容 the quick brown fox jumped over the ...

elasticsearch 倒排索引原理

elasticsearch 使用一種稱為 倒排索引 的結構,它適用於快速的全文搜尋。乙個倒排索引由文件中所有不重複詞的列表構成,對於其中每個詞,有乙個包含它的文件列表。例如,假設我們有兩個文件,每個文件的content域包含如下內容 the quick brown fox jumped over t...

ElasticSearch關於倒排索引

在我們說倒排索引的時候讓我們先去了解一下什麼叫做正排索引 在說倒排索引之前我們先說說什麼是正排索引。正排索引也稱為 前向索引 它是建立倒排索引的基礎。這種組織方法在建立索引的時候結構比較簡單,建立比較方便且易於維護 因為索引是基於文件建立的,若是有新的文件加入,直接為該文件建立乙個新的索引塊,掛接在...