ElasticSearch的filter原理深度剖析
# 首先在倒排列表中匹配字符串,返回文档列表
# 然后为每一个匹配到的文档列表构建一个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原理深度剖析相关推荐
- 唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理
上一篇 唯一插件化Replugin源码及原理深度剖析–唯一Hook点原理 在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化.hook系统ClassLoader.插件的 ...
- 布隆过滤器原理深度剖析
HBase布隆过滤器原理深度剖析 1. 数据结构与原理 1.1 初始化 1.2 变量映射 1.3 变量检索 1.4 总结 2. 过滤器特性 2.1 误判率 2.2 判断特点 3. 案列代码 1970年 ...
- git原理详解与实操指南_全网最精:学git一套就够了,从入门到原理深度剖析
以上资源收集至互联网 如有侵权请联系删除 资源获取方式 扫码关注资源库公众号 回复密码'20190812' 即可获得 截图展示 课程信息 课程难度:中级 学习人数:148352 课程状态:已完结 时长 ...
- 云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...
- 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)
文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...
- 云原生钻石课程 | 第5课:Kubernetes存储架构原理深度剖析(下)
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...
- 好文推荐 | MySQL binlog应用场景与原理深度剖析
作者:田守枝 来自:田守枝的博客(公众号) 本文深入介绍Mysql Binlog的应用场景,以及如何与MQ.elasticsearch.redis等组件的保持数据最终一致.最后通过案例深入分析binl ...
- Mysql binlog应用场景与原理深度剖析
1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...
- Spring 框架之 AOP 原理深度剖析!|CSDN 博文精选
作者 | GitChat 责编 | 郭芮 出品 | CSDN 博客 AOP(Aspect Oriented Programming)面向切面编程是 Spring 框架最核心的组件之一,它通过对程序结构 ...
最新文章
- smarty---设置
- Linux安装配置php7+nginx
- MultiByteToWideChar和WideCharToMultiByte用法详解
- 优先队列如何按照pair 的第二关键字排序(对比vector按照pair第二关键字排序)
- Linux 命令之 sudo -- 以其他用户身份来执行命令
- python编写函数showmsg(n、name)_Python语言答案
- C++ API 设计 15 第十章 测试
- [算法笔记]如何证明一个问题是NPC问题
- gtp怎么安装系统_UEFI+GTP模式下使用GHO文件安装Win8系统的具体操作方法
- word2016 卡顿_word2016经常发生卡顿现象
- 【python进阶】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- 芯片短缺局势依然严峻,供应链上下该如何破局?
- vm文件,.vm后缀的文件
- java邮箱发送验证码_java实现使用QQ邮箱发送验证码功能
- 【Leetcode_SQL】1179.重新格式化部门表
- Ja进av阶书籍推荐
- 马云说完新零售,范驰开讲新店商
- 赋范空间与巴拿赫空间
- 瘦子的肠道菌群和胖子的区别_明明吃同样的饭,为什么只有你胖了?
- 【论文阅读】You Are What You Do:通过数据来源分析寻找隐蔽的恶意软件
热门文章
- java 鼠标拖动_java 让表项支持鼠标拖动移位,并自动滚动滚动条
- fiddler启动文件_如何成为Fiddler大神,请看这里!
- 一文看懂什么是MQ消息队列
- qt qthead里如何响应信号_Qt之QThread(深入理解)
- ARM中断产生和管理
- 表单设置默认值_你还不知道表单怎么设计吗?看这里!
- numpy randn 和_人生苦短,自学python——numpy模块
- android emulator培训,android emulator(未完)
- 250php货币,FreeHostia免费PHP空间中文面板250MB空间6GB流量
- html标签的pre语义,HTML pre 标签