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