ElaticSearch进阶(2)_filter执行原理 bitset机制与caching机制

1.倒排索引

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

  • 用时间类型date作为filter来举例, filter:2017-02-02
  • 倒排索引如下:
worddoc1doc2doc3
2017-01-01
2017-02-02
2017-03-03

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

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

其中个bitset 如下,其中0表示未匹配,1 表示匹配
[0, 1, 1]
doc1不匹配
doc2和doc3匹配这个filter的

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

后面会讲解,一次性其实可以在一个search请求中,发出多个filter条件,每个filter条件都会对应一个bitset,遍历每个filter条件对应的bitset,先从最稀疏的进行遍历
[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
然后将doc4作为结果返回给client

4.caching bitset

caching bitset,跟踪query,在最近256个query中超过一定次数的过滤条件,缓存其bitset。对于小segment(<1000条,或<3%),不缓存bitset。

  • 比如postDate=2017-01-01,[0, 0, 1, 1, 0,
    0],可以缓存在内存中,这样下次如果再有这个条件过来的时候,就不用重新扫描倒排索引,反复生成bitset,可以大幅度提升性能。
  • 在最近的256个filter中,有某个filter超过了一定的次数,次数不固定,就会自动缓存这个filter对应的bitset
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值