您当前的位置: 首页 >  搜索

Dongguo丶

暂无认证

  • 2浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

03结构化搜索_filter执行原理深度剖析(bitset机制与caching机制)

Dongguo丶 发布时间:2021-11-16 22:31:58 ,浏览量:2

filter执行原理 (1)在倒排索引中查找搜索串,获取document list

以date来举例

worddoc1doc2doc32017-01-01**2017-02-02**2017-03-03***

filter:2017-02-02

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

(2)为每个在倒排索引中搜索到的结果,构建一个bitset,[0, 0, 0, 1, 0, 1]

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

构建的bitset:[0, 1, 1]

doc1:不匹配这个filter的 doc2和do3:是匹配这个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]

先遍历postDate,再遍历userID。遍历完两个bitset之后,找到的匹配所有条件的doc,就是doc4

就可以将document作为结果返回给client了

(4)caching bitset,跟踪query,在最近256个query中超过一定次数的过滤条件,缓存其bitset。对于小segment(
关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.0393s