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的内容傳回。