elasticsearch索引原理
多渠道簡單理解elasticsearch的索引原理:
正排索引
ID |
內容 |
1 |
elasticsearch是最火爆的分散式搜尋引擎 |
2 |
java是世界上最好的語言 |
3 |
搜尋引擎是如何誕生的 |
倒排索引:將欄位內容進行分詞後以一下形式進行索引儲存
索引詞元 | 文件ids |
elasticsearch | 1 |
火爆 | 1 |
分散式 | 1 |
搜尋引擎 | 1,3 |
java | 2 |
世界 | 2 |
最好 | 2 |
語言 | 2 |
如何 | 3 |
誕生 | 3 |
倒排列表:以"搜尋引擎"為例
文件ID | TF(詞頻) | position(位置) | offset(偏移量) |
1 | 1 | 3 | <21,25> |
3 | 1 | 0 | <0,4> |
Elasticsearch分別為每個field都建立了一個倒排索引,elasticsearch, 火爆, 分散式, 搜尋引擎這些叫term,當有成千上萬的term的時候,es是如何快速找到對應的索引呢?
Elasticsearch為了能快速找到某個term,將所有的term排個序,二分法查詢term,logN的查詢效率,就像通過字典查詢一樣,這就是Term Dictionary。
B-Tree通過減少磁碟尋道次數來提高查詢效能,Elasticsearch也是採用同樣的思路,直接通過記憶體查詢term,不讀磁碟,但是如果term太多,term dictionary也會很大,放記憶體不現實,於是有了Term Index,就像字典裡的索引頁一樣,A開頭的有哪些term,分別在哪頁,可以理解term index是一顆樹。
這棵樹不會包含所有的term,它包含的是term的一些字首。通過term index可以快速地定位到term dictionary的某個offset,然後從這個位置再往後順序查詢。
所以term index不需要存下所有的term,而僅僅是他們的一些字首與Term Dictionary的block之間的對映關係,再結合FST(Finite State Transducers)的壓縮技術,可以使term index快取到記憶體中。從term index查到對應的term dictionary的block位置之後,再去磁碟上找term,大大減少了磁碟隨機讀的次數。
利用倒排索引,進行搜尋的話,假設現在有100萬條資料,拆分出來的詞語,假設有1000萬個,那麼在倒排索引中,就有1000萬行,我們並不需要搜尋1000萬次,直接在Term index中快速定位即可,這樣我們就可以找到這個搜尋詞對應的資料。
參考:
相關文章
- 剖析 Elasticsearch 的索引原理Elasticsearch索引
- Elasticsearch核心技術(四):索引原理分析Elasticsearch索引
- 【Elasticsearch】Elasticsearch 索引模板Elasticsearch索引
- 六十四、Elasticsearch核心原理-再談倒排索引Elasticsearch索引
- Elasticsearch索引。Elasticsearch索引
- ElasticSearch 索引 VS MySQL 索引Elasticsearch索引MySql
- ElasticSearch建立索引Elasticsearch索引
- Elasticsearch 學習索引Elasticsearch索引
- elasticsearch配置注入索引Elasticsearch索引
- elasticsearch之多索引查詢Elasticsearch索引
- elasticsearch如何設計索引Elasticsearch索引
- Elasticsearch(三):索引查詢Elasticsearch索引
- Elasticsearch 索引容量管理實踐Elasticsearch索引
- ElasticSearch效能原理拆解Elasticsearch
- ElasticSearch 倒排索引(Inverted Index)| 什麼是倒排索引?Elasticsearch索引Index
- 使用Elasticsearch的動態索引和索引優化Elasticsearch索引優化
- MySQL索引原理MySql索引
- Oracle索引原理Oracle索引
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- Elasticsearch 7.x:2、索引管理Elasticsearch索引
- Elasticsearch索引生命週期管理方案Elasticsearch索引
- elasticsearch(三)----索引建立與刪除Elasticsearch索引
- 教你如何在 elasticsearch 中重建索引Elasticsearch索引
- Elasticsearch5.x建立索引(Java)ElasticsearchH5索引Java
- Elasticsearch——document相關原理Elasticsearch
- Mysql索引結構與索引原理MySql索引
- Elasticsearch之索引模板index template與索引別名index aliasElasticsearch索引Index
- oracle index索引原理OracleIndex索引
- MySQL:索引工作原理MySql索引
- (轉)Oracle索引原理Oracle索引
- Elasticsearch 索引的對映配置詳解Elasticsearch索引
- python建立elasticsearch索引的探討PythonElasticsearch索引
- Elasticsearch ILM DSL 索引生命週期管理Elasticsearch索引
- ElasticSearch 獲取es資訊以及索引操作Elasticsearch索引
- Elasticsearch系列---聚合查詢原理Elasticsearch
- 淺析InnoDB引擎的索引和索引原理索引
- Elasticsearch 技術分析(九):Elasticsearch的使用和原理總結Elasticsearch
- 使用ELASTICSEARCH進行近實時索引 - bozhoElasticsearch索引