Elasticsearch倒排索引和排序
在Elasticsearch索引的字段映射 文章中梳理了索引mapping中的一些属性配置,其中index配置控制字段数据是否被索引,即是否支持查询。本文详细介绍下查询索引的实现。
倒排索引
说到索引并不陌生,比如大家熟知的Mysql数据库中的B+tree索引,btree索引需要兼顾读写两种场景,需要考虑索引对写的优化。
而Elasticsearch是通过Lucene的倒排索引技术实现的,由于ES从设计上对于写的支持就是近实时的,这时候既然不需要支持快速的更新了,就可以用预先排序等方式换取更小的存储空间,更快的检索速度等好处,其代价就是更新慢。
倒排索引中几个概念,分别是term dictionary 和 term index,以及Posting list。
假设要往某索引下存在下面三条数据:
[{"docId": 1,"age": 10,"name": "nice"},{"docId": 2,"age": 15,"name": "join"},{"docId": 3,"age": 10,