Elasticsearch笔记第二十四篇

88 阅读2分钟

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
worddoc1doc2
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的部分

image.png

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客户端

image.png

一般搜索,如果不加from和size,就默认搜索前10条,按照_score排序