我们在mongo中有数百万个文档,我们希望在solr上编制索引。显然,当我们第一次执行此操作时,我们需要索引所有文档。
但在那之后,我们只需要在文档发生变化时对其进行索引。做这个的最好方式是什么?我们应该调用addDocument然后在cron中调用commit()吗? addDocument vs commit vs optimize do(我正在使用Apache_Solr_Service)
答案 0 :(得分:2)
如果你正在使用Solr 3.x,你可以forget the optimize,它将所有段合并为一个大段。提交使新的IndexReader可以看到更改;它很贵,我不会为你添加的每个文件调用它。我不是通过cron调用它,而是使用solrconfig.xml
中的autocommit。您可以根据在搜索时等待获取新文档的时间来调整值。
答案 1 :(得分:0)
在您执行commit()之前,文档实际上不会被添加到索引中 - 它可以回滚。 optimize()将(表面上;我没有特别好运)减少索引的大小(已删除的文档仍占用空间,除非索引已优化)。
答案 2 :(得分:0)
如果为数据库设置了自动提交,那么当自动提交间隔已过时,您可以确保通过更新添加到数据库的任何文档已提交。我使用了5分钟的间隔,即使在5分钟内发生了几千次更新,它也能正常工作。完整的重新索引完成后,我等待5分钟,然后告诉人们它已完成。事实上,当人们询问更新如何快速进入数据库时,我会告诉他们我们每分钟都会轮询更改,但是有变量(例如突然大批量)并且最好不要期望事情更新持续5或6分钟。到目前为止,没有人真正声称业务需要让它更快地更新。
这是350,000记录db,总计大约10G RAM。