天天看點

【ELK】用Elasticsearch搜尋為什麼會那麼快呢?反向索引正排索引反向索引查詢過程

elasticsearch(簡稱ES)是一個基于Lucene建構的開源、分布式、RESTful的全文本搜尋引擎,大家都知道使用elasticsearch全文搜尋,是因為用它快,那為什麼會快呢?這主要取決于它底層是用反向索引實作的。那什麼是反向索引呢,與之對應的正排索引又是什麼呢?

正排索引

elasticsearch是面向文檔的,每向elasticsearch插入一個文檔,他都會與之對應生成一個id

建構正排索引,如下

文檔編号 文檔内容
1 世界不會辜負可愛的人
2 而我們如此可愛
3 可愛的我們

這種方式,檢索的效率低

如果用反向索引會是什麼樣呢

反向索引

反向索引是和正排索引相反的

我們将這些文檔内容分詞,然後對這些分詞進行分組(關于分詞,具體可參考部落格https://blog.csdn.net/cxh6863/article/details/106717539),每個詞都會記錄它出現的頻率和所在文檔中出現的位置

例如我從中隻取了其中3個關鍵詞,反向索引結果如下

Term Posting List
世界 1
我們 2,3
可愛 1,2,3

查詢過程

查詢的時候,比如我查“可愛”這個關鍵詞的時候,他會通過反向索引這個關鍵詞出現的文檔位置是1,2,3,然後再通過正排索引查詢到文檔1,2,3的内容傳回。

繼續閱讀