当我浏览Mike McCandless的这篇精彩的博客时,它解释了 Lucene 的事务功能的强大功能以及我们可以保存旧提交并在之前的提交上打开索引编写器的功能。但我的脑海里立刻出现了这个场景。它是在内部为先前提交执行的新提交创建某种分支,还是只是替换该先前提交之后的所有较新提交并仅保留我刚刚在该先前提交上执行的最近提交?!
问问题
130 次
2 回答
0
如果要强制提交,请调用 commit(),或者关闭编写器。提交完成后,新打开的 IndexReader 实例将看到该提交时对索引的更改。在此模式下运行时,请注意不要在进行优化或分段合并时刷新您的阅读器,因为这会占用大量磁盘空间。
无论 autoCommit 是什么,IndexReader 或 IndexSearcher 只会看到索引在它打开的“时间点”。阅读器打开后提交给索引的任何更改在重新打开阅读器之前都不可见。
void commit()
Commits all pending changes (added & deleted documents, optimizations, segment merges, added indexes, etc.) to the index, and syncs all referenced index files, such that a reader will see the changes and the index updates will survive an OS or machine crash or power loss.
void commit(Map commitUserData)
Commits all changes to the index, specifying a commitUserData Map (String -> String).
于 2012-06-12T04:15:51.480 回答
0
事实上,它创建了一个分支:新提交将反映您打开的旧提交,以及您在索引会话期间所做的任何更改。未来提交(在您打开的提交之后)会发生什么取决于您的删除策略。如果它保存了这些提交,那么在任何时候你都可以自由地针对其中一个打开编写器,也可以从它们中创建一个分支。
于 2012-06-12T15:31:43.993 回答