LRUQueryCache用来对一个Query查询的结果进行缓存,缓存的内容仅仅是文档号集,由于不会缓存文档的打分(Score),所以只有不需要打分的收集器(Collector)才可以使用LRUQueryCache,比如说TotalHitCountCollector收集器,另外缓存的文档号集使用BitDocIdSet对象进行存储,在BitDocIdSet中实际使用了FixedBitSet对象进行存储。
即使使用了不需要打分的收集器,也不一定对所有的查询结果进行缓存,有诸多苛刻的条件,在下文中会详细介绍。
LRUQueryCache中缓存的Query结果是有上限限制的,在每次添加一个缓存时,根据两种阈值来判断是否需要将某个已经缓存的数据剔除,使用的算法为LRU:
-
maxCachedQueries:缓存的结果数量,默认值1000
-
maxRamBytesUsed:缓存占用的内存量,默认值32MB或可分配内存的5%中的较小值
当然,我们可以自定义maxCachedQueries跟maxRamBytesUsed的值。
看这里:https://www.amazingkoala.com.cn/Lucene/Search/2019/0506/57.html