# 内核级知识点之 doc value 初步探秘
- 倒排索引: 搜索的时候使用
- 正排索引:排序的时候使用,看到每个 document 的每个 field,然后进行排序,所谓的正排索引,其实就是doc values
在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是 doc values,以供排序,聚合,过滤等操作使用
doc values 是被保存在磁盘上的,此时如果内存足够,os 会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os 会将其写入磁盘上
# 倒排索引回顾
比如:
doc1: hello world you and me doc2: hi, world, how are you
倒排索引可能如下:
word | doc1 | doc2 |
---|---|---|
hello | * | |
world | * | * |
you | * | * |
and | * | |
me | * | |
hi | * | |
how | * | |
are | * |
query string:hello you --> hello, you
hello --> doc1 you --> doc1,doc2
在倒排索引中就匹配到了。
# 正排索引
doc1: hello world you and me
doc2: hi, world, how are you
sort by age
doc1: { "name": "jack", "age": 27 }
doc2: { "name": "tom", "age": 30 }
1
2
2
document | name | age |
---|---|---|
doc1 | jack | 27 |
doc2 | tom | 30 |
疑问
还是没有明白,怎么用来排序的,对于正排索引来说,搜索到所有的文档之后,再按照文档中的字段排序不行么?
那么正排索引和平时 mysql 中的类似,直接获取 document 然后按照字段排序。
这两个貌似是一样的?