主要知识点:

  • 一次filter执行顺序
  • filter和query的特点

 
 

一、一次filter执行顺序

 
 

1、在倒排索引中查找搜索串,获取document list

以一下date数据来举例

 
 

word                doc1                doc2                doc3

 
 

2017-01-01        *                *

2017-02-02                        *                *

2017-03-03        *                *                *

filter:2017-02-02

到倒排索引中去查找,发现2017-02-02对应的document list是doc2,doc3

 
 

、为每个在倒排索引中搜索到的结果,构建一个bitset,

这一步非常重要。使用找到的doc list,构建一个bitset,bitset就是一个二进制的数组,数组每个元素都是0或1,用来标识一个doc对一个filter条件是否匹配,如果匹配就是1,不匹配就是0

上例匹配的bitset是[0,1,1],doc1不匹配这个filter条件,doc2和do3匹配这个filter条件。

用bitset的目的是尽可能用最简单的数据结构去实现复杂的功能,可以节省内存空间,提升性能。

 
 

3、遍历每个过滤条件对应的bitset

在一个search请求中,可以发出多个filter条件,每个filter条件都会对应一个bitset。所以在遍历每个filter条件对应的bitset时,先从最稀疏的开始依次遍历,这样就可以先过滤掉尽可能多的数据。[0, 0, 0, 1, 0, 0]和[0, 1, 0, 1, 0, 1]比较,前者就比较稀疏,因为1较后者少。示例:

请求:filter,postDate=2017-01-01,userID=1

postDate: [0, 0, 1, 1, 0, 0]

userID: [0, 1, 0, 1, 0, 1]

遍历完两个bitset之后,找到的匹配所有条件的doc,本例结果就是doc4,这样就可以将doc4作为结果返回给client了

 
 

4、建立caching bitset

es会跟踪query,在最近256个query中es会对超过一定次数(该次数不固定)的过滤条件,自动缓存这个filter对应的bitset。对于小segment(数据小于1000条,或该segment的大小小于所在index的大小的3%)不缓存bitset。这样就可以把bitset缓存在内存中,这样下次如果再有同样的条件过来的时候,就不用再一次重新扫描倒排索引,反复生成bitset,可以大幅度提升性能

小segment对应的bitset不缓存的原因:segment数据量很小,扫描很快;segment会在后台自动合并,小segment很快就会跟其他小segment合并成大segment,此时就缓存也没有什么意义,因为segment很快就消失了,而原缓存的bitset还是对应原segment的顺序。

filter比query的好处就在于filter会自动caching,实际bitset上并不是一个filter返回的完整的doc list数据结果。而是把filter bitset缓存起来。下次不用扫描倒排索引了。

 
 

二、filter和query的特点

1、filter和query执行顺序

filter大部分情况下在query之前执行,这样做的目的是先过滤掉尽可能多的数据。

query:是会计算doc对搜索条件的relevance score,还会根据这个score去排序

filter:只是简单过滤出想要的数据,不计算relevance score,也不排序

 
 

2、cached bitset会被自动更新

如果document有新增或修改,或者segment有变化,那么cached bitset会被自动更新

 
 

3、对两次相同的filter条件

以后只要是有相同的filter条件的,会直接来使用这个过滤条件对应的cached bitset

 
 

 

 
 

 
 

 
 

3.filter原理(bitset机制与caching机制)的更多相关文章

  1. elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)

    (1)在倒排索引中查找搜索串,获取document list date来举例 word doc1 doc2 doc3 2017-01-01 * *2017-02-02  *   *2017-03-03 ...

  2. 《深入理解mybatis原理》 MyBatis事务管理机制

    MyBatis作为Java语言的数据库框架,对数据库的事务管理是其很重要的一个方面.本文将讲述MyBatis的事务管理的实现机制. 首先介绍MyBatis的事务Transaction的接口设计以及其不 ...

  3. Atitit. servlet 与 IHttpHandler  ashx  listen 和HttpModule的区别与联系 原理理论 架构设计   实现机制    java php c#.net js javascript  c++ python

    Atitit. servlet 与 IHttpHandler  ashx  listen 和HttpModule的区别与联系 原理理论 架构设计   实现机制    java php c#.net j ...

  4. cookie机制和session机制的原理和区别[转]

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...

  5. Filter 原理

    二.Filter 原理 2.1 Filter 概述 Filter(过滤器)是 DirectShow 中最基本的概念.DirectShow 是通过 Filter Graph 来管理 Filter 的.F ...

  6. Atitit.事件机制 与 消息机制的联系与区别

    Atitit.事件机制 与 消息机制的联系与区别 1. 消息/事件机制是几乎所有开发语言都有的机制,在某些语言称之为消息(Event),有些地方称之为(Message).1 2. 发布/订阅模式1 3 ...

  7. ActiveMQ讯息传送机制以及ACK机制

    http://blog.csdn.net/lulongzhou_llz/article/details/42270113 ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息 ...

  8. Linux内存寻址之分段机制及分页机制【转】

    前言 本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制: 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为 ...

  9. nginx AIO机制与sendfile机制

    nginx AIO机制与sendfile机制 从0.8.11版本开始, nginx 开始支持Linux native aio,如何在nginx里配置使用这套机制是本文介绍的重点.在下面的示例配置中,几 ...

随机推荐

  1. ubuntu多版本jdk安装及切换

    系统:ubuntu14.04 一.安装openjdk1.7 sudo apt-get install openjdk-7-jre openjdk-7-jdk 安装完成后找到其安装路径: dpkg -L ...

  2. XAML实例教程系列 - 对象和属性(二)

    XAML实例教程系列 - 对象和属性 2012-05-22 14:18 by jv9, 1778 阅读, 6 评论, 收藏, 编辑 在前一篇已经介绍XAML概念:“XAML语言是Extensible ...

  3. 把TXT GB2312文件转换成TXT UTF8文件

    /// <summary>        /// 把TXT GB2312文件转换成TXT UTF8文件        /// </summary>        /// < ...

  4. linux命令 - free -m

    如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. [root@zabbix ~]# free -m total used free shared buffers ...

  5. struts2基础学习----struts.xml配置文件

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...

  6. ie8 js编译器对象为空或不是对象的一个小问题

    昨天在遍历json串的时候碰到了如下图所示的问题,除ie8以下版本的浏览器运行都是正常的, 部分代码如下: 1 var Workmodel=function(){ 2 model_json=[ 3 { ...

  7. 4.28 QBXT模拟赛

    NOIP2016提高组模拟赛 ——By wangyurzee7 中文题目名称 迷妹 膜拜 换数游戏 英文题目与子目录名 fans mod game 可执行文件名 fans mod game 输入文件名 ...

  8. [Apple开发者帐户帮助]九、参考(3)支持的功能(iOS)

    iOS应用程序可用的功能取决于您的程序成员身份. 能力 ADP 企业 Apple开发者 访问Wifi信息   应用程序组 Apple Pay     相关域名   自动填充凭据提供程序   背景模式 ...

  9. SpringBoot2.0整合SpringSecurity实现自定义表单登录

    我们知道企业级权限框架一般有Shiro,Shiro虽然强大,但是却不属于Spring成员之一,接下来我们说说SpringSecurity这款强大的安全框架.费话不多说,直接上干货. pom文件引入以下 ...

  10. 【Leetcode】115. Distinct Subsequences

    Description: Given two string S and T, you need to count the number of T's subsequences appeared in ...