ElasticSearch(二十一)正排和倒排索引

1.区别缓存

搜索的时候,要依靠倒排索引;排序的时候,须要依靠正排索引,看到每一个document的每一个field,而后进行排序,所谓的正排索引,其实就是doc values并发

在创建索引的时候,一方面会创建倒排索引,以供搜索用;一方面会创建正排索引,也就是doc values,以供排序,聚合,过滤等操做使用性能

doc values是被保存在磁盘上的,此时若是内存足够,os会自动将其缓存在内存中,性能仍是会很高;若是内存不足够,os会将其写入磁盘上spa

 

下面两条documentcode

doc1: hello world you and me
doc2: hi, world, how are youorm

2.倒排索引,用来进行搜索blog

word        doc1        doc2

hello        *
world        *        *
you          *        *
and          *
me           *
hi                    *
how                   *
are                   *

3.正排索引,用来进行排序排序

document    name        age

doc1        jack        27
doc2        tom        30    

sort by age,取出age进行排序索引

4.倒排索引的结构 内存

(1)包含这个关键词的document list
(2)包含这个关键词的全部document的数量:IDF(inverse document frequency)
(3)这个关键词在每一个document中出现的次数:TF(term frequency)
(4)这个关键词在这个document中的次序
(5)每一个document的长度:length norm
(6)包含这个关键词的全部document的平均长度

5.倒排索引不可变的好处和坏处

(1)不须要锁,提高并发能力,避免锁的问题
(2)数据不变,一直保存在os cache中,只要cache内存足够
(3)filter cache一直驻留在内存,由于数据不变
(4)能够压缩,节省cpu和io开销

倒排索引不可变的坏处:每次都要从新构建整个索引

相关文章
相关标签/搜索