译自:原文地址
有时候这个问题的引出是因为某些32位操作系统的文件大小不能超过2GB。
下面是略加修改后的Doug Cutting的回答:
最简单的方法是使用IndexWriter.setMaxMergeDocs()。
例如,如果,你在800万文档的情况下达到了2GB的限制,那么把MaxMergeDocs设置为700万。这样Lucene就不会合并出来一个不适合你文件系统的文件。这样实际上的限制会为,比你的设置的值小一点的Index.mergeFactor的乘方。
所以如果你的mergeFactor设置为10,而maxMergeDocs设置为700万,那么会生成一系列包含100万文档的索引,因为合并10个这样的索引就会超越限制的。
一个略微复杂的方案是:
这样你可以减少段的数目,当你加入700万文档后,优化索引然后开始一个新的索引。然后使用MultiSearcher来搜索这些索引。
一个更复杂的可选方案是:
写一个不同的FSDirectory实现,当文件达到2GB的时候,创建一个子目录,然后把这个文件存储为一系列文件。
所属分类:
[lucene]
[Java]
tag:
32位,
索引,
tinyfool发布于2009年10月30日 16:38
最后更新于2009年10月30日 16:39