加速Solr索引

pha*_*ips 13 lucene solr

我正在努力加快我的索尔索引速度.我只想默认知道Solr使用多少线程(如果有的话)进行索引.有没有办法增加/减少这个数字.

jpo*_*ntz 12

索引文档时,将执行几个步骤:

  • 分析文件,
  • 数据放在RAM缓冲区中,
  • 当RAM缓冲区已满时,数据将刷新到磁盘上的新段,
  • 如果有超过$ {mergeFactor}段,则合并段.

前两个步骤将在客户端向Solr发送数据的线程中运行,因此如果您希望Solr为这些步骤运行三个线程,您只需要从三个线程向Solr发送数据.

如果使用ConcurrentMergeScheduler(http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/index/ConcurrentMergeScheduler.html),则可以配置第四步使用的线程数.但是,没有意义配置Solr配置文件中使用的最大线程数,因此您需要编写一个在构造函数中调用setMaxThreadCount的自定义类.

我的经验是,使用Solr提高索引速度的主要方法是:

  • 购买更快的硬件(尤其是I/O),
  • 从多个线程向Solr发送数据(与核心一样多的线程是一个好的开始),
  • 使用Javabin格式,
  • 使用更快的分析仪.

虽然StreamingUpdateSolrServer看起来很有趣,可以提高索引性能,但它不支持Javabin格式.由于Javabin解析是比XML解析速度更快,我通过发送批量更新使用CommonsHttpSolrServer和Javabin格式得到了更好的性能(在我的800,但相当小的文档).

您可以阅读http://wiki.apache.org/lucene-java/ImproveIndexingSpeed以获取更多信息.