2010-10-05 33 views
3

继承人我的问题,我执行add()将文档添加到我的索引,然后关闭()它。这很好!Lucene - 打开一个封闭的IndexWriter

现在我有一个新的要求,每次我在我的数据库中保存一些东西,我需要更新我的索引。我无法再创建indexWriter,因为它需要4分钟以上的时间,所以我只需要将文档更新()或添加()到索引。为了实现它,我没有做index.close(),我在填充我的索引后做了index.commit()...但我认为它应该是close,然后打开update() 。

有什么建议吗?谢谢!

回答

11

close是一个代价高昂的操作,如果您经常更新,javadocs建议使用commit。的Javadoc指出close

提交所有更改索引和 关闭所有相关文件。请注意, 这可能是一个昂贵的操作,所以, 试图重新使用一个单一的作家,而不是 关闭和打开一个新的。

我相信closecommit之间的不同之处在于仅commit刷新数据,使其对读者可见,而close过优化指数。这使得commit5 times fasterclose

如果您要连续添加数据,那么最好在commit之后,最后再完成close

+0

非常感谢,我在想同样的事情,但我开放了第二个意见! – orlandoMG 2010-10-20 16:44:24

+0

如果你只是执行'commit()'而不是'close()',那么你的索引就不会被锁定,这会阻止子索引写入索引? – stack247 2015-08-20 15:53:09

相关问题