在介紹Elasticsearch的倒排索引之前我們先了解一下什么是正排索引禾进。
- 正排索引
正排索引就是文檔id到文檔內容硬鞍、單詞的關聯(lián)關系呼奢,如下表中id與文檔內容的關聯(lián)關系化戳。
文檔ID | 文檔內容 |
---|---|
1 | elasticsearch是最流行的搜索引擎 |
2 | php是世界上最好的語言 |
3 | 搜索引擎是如何誕生的 |
那么下面我們介紹一下倒排索引
- 倒排索引
單詞到文檔id的關聯(lián)關系
單詞 | 文檔ID列表 |
---|---|
elasticsearch | 1 |
流行 | 1 |
搜索引擎 | 1单料,3 |
php | 2 |
世界 | 2 |
最好 | 2 |
語言 | 2 |
如何 | 3 |
誕生 | 3 |
倒排索引的查詢流程埋凯,例如查詢包含 “搜索引擎” 對應的文檔,首先通過倒排索引獲得 “搜索引擎” 對應的文檔Id有1和3扫尖,通過正排索引查詢1和3的完整內容白对,返回用戶最終的結果。
倒排索引的組成
倒排索引是搜索引擎的核心换怖,主要包含兩部分:單詞詞典(Term Dictionary) 和 倒排列表(Posting List)
- 單詞詞典(Term Dictionary)
- 記錄所有文檔的單詞甩恼,一般都比較大
- 記錄單詞到倒排列表的關聯(lián)信息
- 倒排列表(Posting List)
倒排列表記錄了單詞的對應的文檔集合,由倒排索引項(Posting)組成沉颂,倒排索引項主要信息包含如下:
- 文檔ID条摸,用于獲取原始信息
- 單詞頻率(TF, Term Frequency), 記錄該單詞在該文檔中出現(xiàn)的次數(shù),用于后續(xù)的相關性算分
- 位置(Position), 記錄單詞在文檔中的分詞位置(多個),用于做詞語搜索(Phrase Query)
- 偏移(Offset),記錄單詞在文檔的開始和結束位置铸屉,用于做高亮顯示