ElasticSearch7.3学习(二十五)----Doc value、query phase、fetch phase解析,ElasticSearch7.3学习(六)----文档(document)内部机制详解

1、Doc value

搜索的时候,要依靠倒排索引;

排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序。

所谓的正排索引,其实就是doc values

在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用,doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上

1.1 倒排索引

doc1: hello world you and me

doc2: hi, world, how are you

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

搜索时:

hello you –> hello, you

hello –> doc1

you –> doc1,doc2

sort by 出现问题,如果需要自定义排序(按照某些字段排序)那么就会出现问题,因为倒排索引已经被分词了。,此时就需要使用正排索引来进行分词

1.2 正排索引

doc1: { “name”: “jack”, “age”: 27 }

doc2: { “name”: “tom”, “age”: 30 }

documentnameage
doc1jack27
doc2tom30

2、文档查询

关于文档的查询过程,前面博客已经解析过了:ElasticSearch7.3学习(六)—-文档(document)内部机制详解

这里再简单的回顾一下。分为两个步骤,第一query,第二fetch

2.1 query 

2.1.1 query phase

(1)搜索请求发送到某一个coordinate node,构构建一个priority queue,长度以paging操作from和size为准,默认为10

(2)coordinate node将请求转发到所有shard,每个shard本地搜索,并构建一个本地的priority queue

(3)各个shard将自己的priority queue返回给coordinate node,并构建一个全局的priority queue

2.1.2 replica shard提升搜索吞吐量

一次请求要打到所有shard的一个replica/primary上去,如果每个shard都有多个replica,那么同时并发过来的搜索请求可以同时打到其他的replica上去

2.2 fetch 

2.2.1 fetch phase

(1)coordinate node构建完priority queue之后,就发送mget请求去所有shard上获取对应的document

(2)各个shard将document返回给coordinate node

(3)coordinate node将合并后的document结果返回给client客户端

 

 

    原文作者:|旧市拾荒|
    原文地址: https://www.cnblogs.com/xiaoyh/p/16247259.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞