title: ElasticSearch之深度应用及原理剖析author: Xonitags:
- 搜索引擎
- Elasticsearchcategories:
- 搜索引擎
- Elasticsearchabbrlink: 5a1f6e0b
解析:date举例:倒排索引列表,过滤date为2020-02-02(filter:2020-02-02)。去倒排索引中查找,发现2020-02-02对应的document list是doc2、doc3。
解析:
- 使用找到的document list,构建一个bitset(二进制数组,用来表示一个document对应一个filter条件是否匹配;匹配为1,不匹配为0)。
- 为什么使用bitset:尽可能用简单的数据结构去实现复杂的功能,可以节省内存空间、提升性能。
- 由上步的document list可以得出该filter条件对应的bitset为:[0, 1, 1];代表着doc1不匹配filter,doc2、doc3匹配filter。
document解析:
- 多个filter组合查询时,每个filter条件都会对应一个bitset。
- 稀疏、密集的判断是通过匹配的多少(即bitset中元素为1的个数)[0, 0, 0, 1, 0, 0] 比较稀疏、[0,1, 0, 1, 0, 1] 比较密集 。
- 先过滤稀疏的bitset,就可以先过滤掉尽可能多的数据。
- 遍历所有的bitset、找到匹配所有filter条件的doc。请求:filter,postDate=2017-01-01,userID=1;postDate:[0, 0, 1, 1, 0, 0]userID: [0, 1, 0, 1, 0, 1]遍历完两个bitset之后,找到的匹配所有条件的doc,就是doc4。
- 将得到的document作为结果返回给client。
关注
打赏
热门博文
- @Redis(redis简介,下载与安装配置,基本操作)
- @Elasticsearch之深度应用及原理剖析--分布式数据一致性机制
- @Elasticsearch之深度应用及原理剖析--并发冲突处理机制
- @Elasticsearch之深度应用及原理剖析--索引文档写入和近实时搜索原理(基本概念,Es写操作流程,近实时搜索原理 ,持久化变更原理)
- @Elasticsearch之深度应用及原理剖析--Filter过滤机制剖析(bitset机制与caching机制)
- @elasticsearch(简介,安装启动,插件,核心配置,操作,分词器)
- @Redis(简介,数据结构,操作指令,持久化RDB和AOF)
- 设计模式-迭代器模式
- @设计模式-适配器模式
- @一文搞懂设计模式--模板模式