lucene&solr cache在sort、facet等方面的应用解析
来源:互联网 发布:plc入门编程 编辑:程序博客网 时间:2024/06/15 03:58
对于cache,Lucene中提两种cache,filter cache和Field cache,lucene的cache在使用的过程中注意评估内存的使用量,避免导致内存溢出。
Filter cache的实现类为CachingWrapperFilter,用来缓存其他lucene Filter的查询结果。
Field cache应用的最为广泛,广泛应用于排序sort、分组统计facet中。简单来说,它存储某个field的所有文档id和该field中的term的对应关系,和倒排索引不同,是正向的信息。在solr sort by field排序场景中,可以在查询出来的docIdSet的基础上,从field cache中查询相关的field值进行排序,其中sort的前提是需要对该field字段进行索引,并且该field字段不可以进行分词。
同样在 solr的分组facet场景中,可以根据field所有document的term数量来考虑分组的方式,如果指定facet.method=fc,则表示term的数量比较大,难以枚举,那么此时会根据field的type来考虑是否利用field cache。如果该field的type是不可以分词tokenized的,则利用该field cache和docidset交集进行梳理统计;如果该field的type是可以分词tokenized的,那么会利用fieldValueCache,cache的key是facet.field的值,value是UnInvertedField,UnInvertedField保存了该field中每个Term,以及term在每个document上该field的频率,保存在一个数组中,类似于term1在doc[1]中的频率为2等等,这样结合查询返回的docIdSet取交集,计算field中term的频率。在facet应用中,一般field设置为是不分词的,这样实际上统计的是field value的出现的频率。
Solr中的cache有filter cache,queryResultCache,documentCache,fieldValueCache,这几种cache都是作为SolrIndexSearcher中变量;除了documentCache外,其他都是对documentid的缓存,生命周期和SolrIndexSearcher对象挂钩,采用LRUCache算法对cache的数据进行管理。
Filter cache存储了fq参数得到的documentId的集合结果,是无序的,在使用过程中和q查询的结果docidSet做交集。除了用fq参数的查询,在solr facet应用中也会使用filter cache,当facet.method=enum时,枚举field的每个term值,封装成fq参数进行查询,返回的结果id和主查询(比如q参数)的docIdSet做交集,进行统计。
FieldValueCache在前面facet应用中已经介绍了。
queryResultCache– ordered document ids,是对查询结果的缓存,key的hashcode就是 QueryResultKey(Query query, List<Query> filters, Sort sort, int nc_flags)的成员变量hc,缓存结果为docIdSet,是针对查询条件的完全有序的结构;这个cache对key的命中率要求比较严格,一般是查询条件不太变的场景下使用。
DocumentCache – stores stored fields,存储docid和document的对应关系,一般很少用。
- lucene&solr cache在sort、facet等方面的应用解析
- Solr Facet的应用
- Solr Facet技术的应用与研究
- Solr Facet技术的应用与研究
- solr的facet性能
- solr的facet查询
- solr的facet查询
- solr的facet性能
- solr的facet查询
- solr的facet查询
- solr的facet查询
- lucene的facet原理
- solr解析和lucene的区别;
- solr学习第六课---solr中facet的基本应用-基于solr搜索引擎
- solr的facet查询(转载)
- solr的group和facet
- solr/lucene查询语法解析
- solr facet
- spring3.1与hibernate4集成配置
- Linux常用命令
- Java Thread.join详解
- 牛人必修 Ant编译android工程 ,并Proguard代码混淆,v4混淆配置
- 《Linux操作系统下C语言编程入门》 - linux 进程
- lucene&solr cache在sort、facet等方面的应用解析
- 杨辉三角的变形-matlab-java
- C++:多维数组的动态分配(new)和释放(delete)
- 《设计模式》学习笔记——桥接模式
- 欢迎您在新浪博客安家
- link1104,1168
- C++头文件和源文件的关系
- 计算机原理虚拟实验之存储器操作软…
- java中如何扩大数组空间