加速Solr索引

时间:2011-08-24 15:33:10

标签: lucene solr

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

3 个答案:

答案 0 :(得分:12)

索引文档时,会执行以下几个步骤:

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

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

如果使用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看起来很有趣,可以提高索引效果,it doesn't support the Javabin format。由于Javabin解析比XML解析更快 ,因此我通过使用CommonsHttpSolrServer和Javabin格式发送批量更新(在我的情况下为800,但文档相当小)来获得更好的性能。

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

答案 1 :(得分:2)

This article描述了使用SolrCloud,Hadoop和Behemoth扩展索引的方法。这是Solr 4.0,在最初发布此问题时尚未发布。

答案 2 :(得分:0)

您可以将内容存储在外部存储中,如文件;

包含大量内容的所有字段,在相应字段的架构集 stored =“false” 中,并将该字段的内容存储在外部文件使用一些有效的文件系统层次结构。

它将索引时间缩短了40%到45%。但是在进行搜索时,搜索时间速度会增加一些。 对于搜索 它花费的时间多了25% 正常搜索。