elastic search中filter过滤器内部实现

大致过程:

  1. 在倒排索引中查找搜索串,获取document list;
  2. 为每个在倒排索引中搜索到的结果,构建一个bitset;
  3. 遍历每个过滤条件对应的bitset,优先从最稀疏的开始搜索,查找满足所有条件的document;
  4. caching bitset,跟踪query;
  5. 如果document有新增或修改,那么cached bitset会被自动更新;
  6. 以后只要是有相同的filter条件的,会直接来使用这个过滤条件对应的cached bitset。

具体过程:

  • 在倒排索引中查找搜索串,获取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,[0, 0, 0, 1, 0, 1]

使用找到的doc list,构建一个bitset,就是一个二进制的数组,数组每个元素都是0或1,用来标识一个doc对一个filter条件是否匹配,如果匹配就是1,不匹配就是0
[0, 1, 1]
doc1:不匹配这个fi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值