1

我用来重新索引 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();

但是经过几次重新索引后,索引的大小确实非常巨大。任何建议我如何解决这个问题。

Lucene 说:

当您还针对您正在优化的索引打开阅读器(IndexReaders 或 IndexSearchers)时,这是 Windows 上的正常行为。Lucene 会在合并(优化)后尝试删除旧的段文件。但是,由于 Windows 不允许删除已打开以供读取的文件,Lucene 捕获 IOException 删除这些文件,然后将这些挂起的可删除文件记录到“可删除”文件中。在接下来的段合并中,这发生在显式 optimize() 或 close() 调用中,并且每当 IndexWriter 将其内部 RAMDirectory 刷新到磁盘时(每个 IndexWriter.DEFAULT_MAX_BUFFERED_DOCS(默认 10)addDocuments),Lucene 将再次尝试删除这些文件(和其他的)和任何仍然失败的都将被重写到可删除的文件中。

但我相信有办法解决这个问题。在任何情况下,索引都会占用所有可用空间,因为它在任何时候都被某人使用..

4

0 回答 0