Elasticsearch Filter缓存
Filter简介:采用bitset记录与过滤器匹配的文档。当Elasticsearch确定一个bitset可能会在将来被重用时,将被直接缓存在内存中,以供以后使用。一旦缓存,这些bitset可以在使用相同查询的任何地方重复使用,而无需再次重新评估这个查询。
稀疏索引:就是0比较多、1比较少的情况的索引。
-
Filter原理
- filter并不是每次执行都会进行cache,而是当执行到一定次数的时候,才会进行cache一个二进制数组(bitset)。1表示匹配,0表示不匹配。cache时需执行次数也是不固定的
- filter会优先从最稀疏的索引开始搜索,查找满足全部条件的doc。
- filter cache保存的是匹配的结果,不需要再从倒排索引中去查找对比,大大的提高搜索效率。
- filter一般会在query之前执行,过滤掉一部分数据,提高搜索效率。
- filter不计算相关度分数,在执行效率上较query较高。
- 当元数据发生改变时,cache也会更新。
-
索引值
- 元数据
id name desc 1 xiaomi phone shouji zhong de zhandouji 2 xiaomi nfc phone zhichi quangongneng nfc,shouji zhong de jianjiji 3 nfc phone shouji zhong de hongzhaji 4 xiaomi erji erji zhong de huangmenji 5 hongmi erji erji zhong de kendeji - 倒排索引
分词 doc xiaomi 1,2,4 phone 1,2,3 nfc 2,3 erji 4,5 hongmi 5 - 元数据词频(xiaomi nfc zhineng phone)
id name desc 匹配数 1 xiaomi phone shouji zhong de zhandouji 2 2 xiaomi nfc phone zhichi quangongneng nfc,shouji zhong de jianjiji 3 3 nfc phone shouji zhong de hongzhaji 3 4 xiaomi erji erji zhong de huangmenji 1 5 hongmi erji erji zhong de kendeji 0 - 二进制数组(bitset)
分词 doc1 doc2 doc3 doc4 xiaomi [1,1,0,1] nfc [0,1,1,0] zhineng [0,0,0,0] phone [1,1,1,0]