Solr 优化主关键字索引

来源:互联网 发布:和俄罗斯人谈恋爱 知乎 编辑:程序博客网 时间:2024/04/30 20:58

    大多在Solr 中的存储的数据有某种类型的主关键字。主关键字作为任何document 的唯一存储值,也是作为某个document唯一性的标识字段,正是因为主关键字在大多数情况下是独一无二的值。尽管如此,这个字段检索到的速度并不是与数据库中的关键字索引一样快的。希望更快,怎么办? Solr 4.x打给我们惊喜。

     在字段区域(schema.xml配置中),有如下设置:

<field name="id" type="string" indexed="true" stored="true" required="true" />


    关键字区域设置:

<uniqueKey>id</uniqueKey>

    一下步骤将优化检索主关键字字段。

1. 使用Lucene弹性检索(flexible indexing)和脉冲编解码器去处理定义的id字段。为了做到这点,需要配置字段类型。

<fieldType name="string_pulsing" class="solr.StrField" postingsFormat="Pulsing40"/>


2. 将修改原来的字段的类型定义:

<field name="id" type="string_pulsing" indexed="true" stored="true" required="true" />


3. 另外,在solrconfig.xml  文件中添加如下配置:

<codecFactory class="solr.SchemaCodecFactory"/>


    这样配置是为了使修改的数据被写到反转索引中去。这里使用“PulsingCodec” (postingsFormat="Pulsing40") ,是为了以一种特殊的方式存储唯一的值。在codec编解码器之后有这种思想:当从索引文件中检索文档术语或者文档时,对于低频率术语(term)以一种特殊的方式写入,保存到一个单一的I/O寻找操作中去。正是如此,当大量地检索主关键字段时,能够获得对于这个字段性能的极大提升。

    在solrconfig.xml file 的配置是必须的,没有这个配置会报出Exception,而指定这个配置就是让Solr使用codec工厂创建一个codec实例而已。有时,你会发现这样修改,性能上并没有特别显著地提高,可能是由于索引文件少,没法感知到而已。