# 首先在倒排列表中匹配字符串,返回文档列表

# 然后为每一个匹配到的文档列表构建一个bitset。[0,1,0,0,1]等

用来标志一个文档是否对一个filter条件匹配,如果匹配就是1,否则就是0

# 接着遍历每一个过滤条件对应的bitset,优先从最稀疏的索引开始搜索,查找满足所有条件的document

所谓稀疏索引:就是0比较多1比较少的情况的索引。

一次性其实可以在一个search请求中,发出多个filter条件,每个filter条件都会对应一个bitset遍历每个filter条件对应的bitset,先从最稀疏的开始遍历。比如:

我查找Color=Red ANDOnSale=true的文档:

假设两者稀疏索引如下:

onSale: 0 0 1 0 0 0 0

red:   0 1 10 0 0 0

遍历完两个bitset之后,找到的匹配所有条件的文档

# Caching bitset ,跟踪query,在最近256个query中超过一定次数的过滤条件,缓存其bitset。对于小的segment,不缓存bitset

我们可以将一些频繁请求的filter在内存中缓存起来,这样下次如果有这个条件到达的时候,就不用重新扫描倒排索引,反复声称bitset,大幅度提升性能

针对比较小的segment我们可以不缓存,意义不大,第一是segment很小,计算扫描也很快;另外segment在后台会自动合并,小的segment就会很快跟其他小segment合并成大的segment,所以缓存的也没啥意义

# Filter在query执行之前,先尽可能过滤掉更多的数据

Query:是会计算文档对搜索条件的相关度分值,还会根据这个打分进行排序

Filter: 只是简单的过滤数据,不计算相关度分值,也不排序

# 如果document有新增或修改,那么cached bitset 会被自动更新

# 以后只要有相同条件filter条件的,会直接使用这个过滤条件对应的cachedlist

ElasticSearch的filter原理深度剖析相关推荐

  1. 唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理

    上一篇 唯一插件化Replugin源码及原理深度剖析–唯一Hook点原理 在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化.hook系统ClassLoader.插件的 ...

  2. 布隆过滤器原理深度剖析

    HBase布隆过滤器原理深度剖析 1. 数据结构与原理 1.1 初始化 1.2 变量映射 1.3 变量检索 1.4 总结 2. 过滤器特性 2.1 误判率 2.2 判断特点 3. 案列代码 1970年 ...

  3. git原理详解与实操指南_全网最精:学git一套就够了,从入门到原理深度剖析

    以上资源收集至互联网 如有侵权请联系删除 资源获取方式 扫码关注资源库公众号 回复密码'20190812' 即可获得 截图展示 课程信息 课程难度:中级 学习人数:148352 课程状态:已完结 时长 ...

  4. 云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...

  5. 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)

    文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...

  6. 云原生钻石课程 | 第5课:Kubernetes存储架构原理深度剖析(下)

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...

  7. 好文推荐 | MySQL binlog应用场景与原理深度剖析

    作者:田守枝 来自:田守枝的博客(公众号) 本文深入介绍Mysql Binlog的应用场景,以及如何与MQ.elasticsearch.redis等组件的保持数据最终一致.最后通过案例深入分析binl ...

  8. Mysql binlog应用场景与原理深度剖析

    1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...

  9. Spring 框架之 AOP 原理深度剖析!|CSDN 博文精选

    作者 | GitChat 责编 | 郭芮 出品 | CSDN 博客 AOP(Aspect Oriented Programming)面向切面编程是 Spring 框架最核心的组件之一,它通过对程序结构 ...

最新文章

  1. smarty---设置
  2. Linux安装配置php7+nginx
  3. MultiByteToWideChar和WideCharToMultiByte用法详解
  4. 优先队列如何按照pair 的第二关键字排序(对比vector按照pair第二关键字排序)
  5. Linux 命令之 sudo -- 以其他用户身份来执行命令
  6. python编写函数showmsg(n、name)_Python语言答案
  7. C++ API 设计 15 第十章 测试
  8. [算法笔记]如何证明一个问题是NPC问题
  9. gtp怎么安装系统_UEFI+GTP模式下使用GHO文件安装Win8系统的具体操作方法
  10. word2016 卡顿_word2016经常发生卡顿现象
  11. 【python进阶】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  12. 芯片短缺局势依然严峻,供应链上下该如何破局?
  13. vm文件,.vm后缀的文件
  14. java邮箱发送验证码_java实现使用QQ邮箱发送验证码功能
  15. 【Leetcode_SQL】1179.重新格式化部门表
  16. Ja进av阶书籍推荐
  17. 马云说完新零售,范驰开讲新店商
  18. 赋范空间与巴拿赫空间
  19. 瘦子的肠道菌群和胖子的区别_明明吃同样的饭,为什么只有你胖了?
  20. 【论文阅读】You Are What You Do:通过数据来源分析寻找隐蔽的恶意软件

热门文章

  1. java 鼠标拖动_java 让表项支持鼠标拖动移位,并自动滚动滚动条
  2. fiddler启动文件_如何成为Fiddler大神,请看这里!
  3. 一文看懂什么是MQ消息队列
  4. qt qthead里如何响应信号_Qt之QThread(深入理解)
  5. ARM中断产生和管理
  6. 表单设置默认值_你还不知道表单怎么设计吗?看这里!
  7. numpy randn 和_人生苦短,自学python——numpy模块
  8. android emulator培训,android emulator(未完)
  9. 250php货币,FreeHostia免费PHP空间中文面板250MB空间6GB流量
  10. html标签的pre语义,HTML pre 标签