Elasticsearch 倒排索引

2021-09-13 08:10:35 字數 1835 閱讀 6234

elasticsearch 使用一種稱為倒排索引的結構,它適用於快速的全文搜尋。

乙個倒排索引由文件中所有不重複詞的列表構成,對於其中每個詞,有乙個包含它的文件列表。

假設我們有兩個文件,每個文件的 content 域包含如下內容:

the quick brown fox jumped over the lazy dog

quick brown foxes leap over lazy dogs in summer

為了建立倒排索引,我們首先將每個文件的 content 域拆分成單獨的 詞(我們稱它為 詞條 或 tokens ),建立乙個包含所有不重複詞條的排序列表,然後列出每個詞條出現在哪個文件。結果如下所示:

term      doc_1  doc_2

-------------------------

quick | | x

the | x |

brown | x | x

dog | x |

dogs | | x

fox | x |

foxes | | x

in | | x

jumped | x |

lazy | x | x

leap | | x

over | x | x

quick | x |

summer | | x

the | x |

------------------------

現在,如果我們想搜尋 quick brown ,我們只需要查詢包含每個詞條的文件:

term      doc_1  doc_2

-------------------------

brown | x | x

quick | x |

------------------------

total | 2 | 1

兩個文件都匹配,但是第乙個文件比第二個匹配度更高。如果我們使用僅計算匹配詞條數量的簡單 相似性演算法 ,那麼,我們可以說,對於我們查詢的相關性來講,第乙個文件比第二個文件更佳。

但是,我們目前的倒排索引有一些問題:

使用前面的索引搜尋 +quick +fox 不會得到任何匹配文件。(記住,+ 字首表明這個詞必須存在。)只有同時出現 quick 和 fox 的文件才滿足這個查詢條件,但是第乙個文件包含 quick fox ,第二個文件包含 quick foxes 。

我們的使用者可以合理的期望兩個文件與查詢匹配。我們可以做的更好。

現在索引看上去像這樣:

term      doc_1  doc_2

-------------------------

brown | x | x

dog | x | x

fox | x | x

in | | x

jump | x | x

lazy | x | x

over | x | x

quick | x | x

summer | | x

the | x | x

------------------------

Elasticsearch( )倒排索引

elasticsearch 使用一種叫做 倒排索引 inverted index 的結構來做快速的全文搜尋。倒排索引由在文件 現的唯一的單詞列表,以及對於每個單詞在文件中的位置組成。例如,我們有兩個文件,每個文件content字段包含 the quick brown fox jumped over ...

elasticsearch 倒排索引原理

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

ElasticSearch關於倒排索引

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