Elasticsearch核心知识篇(56)
初识搜索引擎_内核级知识点之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 | * |
- 分词倒排: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 }
document name age
doc1 jack 27
doc2 tom 30
Elasticsearch核心知识篇(57)
初识搜索引擎_分布式搜索引擎内核解密之query phase
query phase
- 搜索请求发送到某一个
coordinate node
,构建一个priority queue
,长度以paging操作from和size为准,默认为10 - coordinate node将请求转发到所有
shard
,每个shard本地搜索,并构建一个本地的priority queue
- 各个shard将自己的priority queue返回给coordinate node,并构建一个全局的priority queuev
和之前的deep paging的原理差不多,可参考deep paging的部分
replica shard如何提升搜索吞吐量
一次请求要打到所有shard的一个replica/primary上去,如果每个shard都有多个replica,那么同时并发过来的搜索请求可以同时打到其他的replica上去
Elasticsearch核心知识篇(58)
初识搜索引擎_分布式搜索引擎内核解密之fetch phase
fetch phase工作流程
- coordinate node构建完priority queue之后(其实这个部分拿到的都是数据的id),就发送mget请求去所有shard上获取对应的document
- 各个shard将document返回给coordinate node
- coordinate node将合并后的document结果返回给client客户端
一般搜索,如果不加from和size,就默认搜索前10条,按照_score排序