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

最新文章

  1. Android编码规范04
  2. Mirantis OpenStack 8.0 版本大概性分析
  3. T3 任职定级面试准备
  4. POJ 3140 Contestants Division 树形DP
  5. delphi android 录像(调用Java的功能)
  6. [redis] 分布式 Redis 的 CRUD 实现
  7. Js笔试题之千分位格式化
  8. LevelDb系列之简介
  9. POJ 3678 Katu Puzzle (2-SAT,常规)
  10. 1.MySQL的安装(linux Ubuntu环境下)
  11. 月見(つきみ) 夕(ゆう) SumiHui.墨虺
  12. 非阻塞IOserver型号
  13. iOS后向兼容:如何发现过期接口
  14. java 之 Spring
  15. CentOS7.2静默安装oracle11g
  16. redis底层设计(三)——redis数据类型
  17. Jenkins整合SonarQube代码检测工具
  18. [转] ES6 import/export:模块导入导出方式
  19. linux crypt()函数使用总结
  20. NYOJ 1016 判断两线段是否相交

热门文章

  1. 学习Apache(五)
  2. openldap 资料
  3. 攻防世界 ics-06
  4. 13_Invariance Principle_LaSalle's Theorem_不变性原理
  5. 【动态系统的建模与分析】8_频率响应_详细数学推导 G(jw)_滤波器
  6. GoF设计模式-23大设计模式(表格)-程序员必备+必背
  7. python-筛法求素数
  8. JavaScript实现有农历和节气节假日的日历
  9. Python入门-面向对象三大特性-多态
  10. Spring的事务控制-基于xml方式