我用来重建索引MassIndexer。我从一些网站获得了代码示例(不记得在哪里)。
massIndexe.purgeAllOnStart(true) // true by default, highly recommended
.optimizeAfterPurge(true) // true is default, saves some disk space
.optimizeOnFinish(true) // true by default
.batchSizeToLoadObjects(100)
.threadsForSubsequentFetching(15)
.threadsToLoadObjects(10)
.limitIndexedObjectsTo(1000)
.cacheMode(CacheMode.IGNORE) // defaults to CacheMode.IGNORE
.startAndWait();
但是经过几次reindex大小的指数真的非常巨大。任何建议如何解决这个问题。
Lucene说:
这是Windows上的正常行为 每当你也有读者 (IndexReaders或IndexSearchers)打开 针对您正在优化的索引。 Lucene试图删除旧段 合并后的文件 (优化)。但是,因为Windows 不允许删除文件 开放阅读,Lucene抓住了 IOException删除这些文件和 然后记录这些待处理的 删除文件到“删除” 文件。在下一段合并, 这发生在显式优化() 或者close()调用以及何时调用 IndexWriter刷新其内部 RAMDirectory到磁盘(每个 IndexWriter.DEFAULT_MAX_BUFFERED_DOCS (默认10)addDocuments),Lucene 将再次尝试删除这些文件 (和其他的)和任何 仍然失败将被重写为 删除文件。
但我相信有办法解决这个问题。在任何情况下索引都将占用所有可用空间,因为它在任何时候都被某人使用..