ElasticSearch7.3学习(二十五)----Doc value、query phase、fetch phase解析
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
term | doc1 | doc2 |
---|---|---|
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 }
document | name | age |
---|---|---|
doc1 | jack | 27 |
doc2 | tom | 30 |
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客户端
最新文章
- Android编码规范04
- Mirantis OpenStack 8.0 版本大概性分析
- T3 任职定级面试准备
- POJ 3140 Contestants Division 树形DP
- delphi android 录像(调用Java的功能)
- [redis] 分布式 Redis 的 CRUD 实现
- Js笔试题之千分位格式化
- LevelDb系列之简介
- POJ 3678 Katu Puzzle (2-SAT,常规)
- 1.MySQL的安装(linux Ubuntu环境下)
- 月見(つきみ) 夕(ゆう) SumiHui.墨虺
- 非阻塞IOserver型号
- iOS后向兼容:如何发现过期接口
- java 之 Spring
- CentOS7.2静默安装oracle11g
- redis底层设计(三)——redis数据类型
- Jenkins整合SonarQube代码检测工具
- [转] ES6 import/export:模块导入导出方式
- linux crypt()函数使用总结
- NYOJ 1016 判断两线段是否相交