描述(供参考):
我想索引整个文件驱动器:~2TB
我正在获取文件列表(使用commons io库)。
获得文件列表后,我会浏览每个文件并使用Apache Tika从中提取可读数据
一旦我获得数据,我就使用solr索引它。
我正在使用solrj和java应用程序
我的问题是:我如何确定传递给Solr的集合大小。我尝试过以不同的尺寸传递不同的结果,即有时每个集合150个文档的性能优于100个文档,但有时它们不会。它们是一种可以调整的最佳方式/配置,因为这个过程必须重复进行。
并发症:
1)文件存储在网络驱动器上,检索文件名/文件也需要一些时间。
2)这个程序(java app)和solr本身都不能使用超过512MB的ram
答案 0 :(得分:0)
我只列举其中一些可能影响索引速度的参数。通常需要尝试使用自己的硬件,RAM,数据处理复杂性等来找到最佳组合,即所有人都没有单一的银弹。
将索引编制期间的段数增加到一些大数。说,10k。这将确保段的合并不会像在默认的段数10中那样经常发生。在索引期间合并段有助于减慢索引。索引编制完成后,您必须合并段才能使搜索引擎执行。还要将段数减少到合理的位置,例如10。
在索引编制期间减少对容器的记录。这可以使用solr管理界面来完成。这使得索引编制过程更快。
要么降低自动提交的频率,要么将其关闭并自行控制提交。
删除批量索引的预热查询,不要自动复制任何缓存条目。
使用ConcurrentUpdateSolrServer,如果使用SolrCloud,则使用CloudSolrServer。
答案 1 :(得分:0)
在单个核心上注释掉自动提交和tlogs和索引。在你的solrj api中使用多线程(线程数=没有cpu * 2)来击中单个核心。
问候
Rajat