优化solr中那难缠的facet

solr中facet功能对于特定字段的统计任务非常实用,可以对特定字段的term进行统计排序,对于单核的小数据来说还好,但是当数据变得很大时,需要进行multicore进行shards查询时,facet功能消耗的内存会异常的高。

对于solr4.2版本来说,通过facet.offset和facet.limit可以实现翻页查询,通过小翻页能够降低内存的使用。但是并不是可行之计,测试进行每页1个结果的翻页,在亿级规模多核上的facet查询还是会很快把64G服务器的JVM爆掉。如果只是去找很少的一些结果,另一种可以人工简化的操作是进行逐一单核查询,取topN,然后扔给前端归并,效果会好很多。

大规模的全局facet功能本是件很头疼的事,solr4.4版本在schema.xml中增加了一个字段属性 docValues, (其实是从4.2版本开始就有了,不过schema中没有介绍,而且并没有完善其功能,所以被忽视了)

在solr4.4中能对solr的facet功能进行优化的有两点:
1. docValues,配置方法:在schema.xml中的字段配置添加docValues属性,例:

  1. <field name=“test” type=“string” indexed=“true” stored=“false” docValues=“true” omitNorms=“true” default=“”/>  

2. 在schema.xml中为facet配置一特殊的fieldType, String_disk. 这样能够大量节省很多的内存,因为默认的配置方法是docValuesFormat=”Lucene42″,相关更多介绍可以参见docValues

  1. <fieldType name=“string_disk” class=“solr.StrField” docValuesFormat=“Disk” />  

配置特殊订制的字段需要在solrconfig.xml中进行相应的配置:

  1. <codecFactory class=“solr.SchemaCodecFactory”/>  

通过上面的两种配置方法能够大手笔的优化solr中比较难缠的facet爆JVM问题。

优化solr中那难缠的facet》上有 1 条评论

  1. Pingback 引用通告: Solr4.7以后版本的新特征 | 刻骨铭心

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>