我正在使用Lucene 7.2.1在64位平台上创建Lucene索引。
问题是,有时在合并触发后提交后,会收到OutOfMemoryError或AssertionError。
索引损坏是否有问题? 因此,readPositions正在读取不正确的高值。 了解什么可能导致这些错误以及可以采取哪些步骤来避免它会有所帮助。
我的索引大小很小(<100MB)。使用MMAP文件。
我不想增加堆大小(当前为1024 MB)
段的maxMerge大小已设置为100MB,因此Lucene不应尝试合并大于此大小的段。
合并策略:LogByteSizeMergePolicy
合并因子:4
java.lang.OutOfMemoryError: Failed to allocate
at org.apache.lucene.codecs.compressing.CompressingTermVectorsReader.readPositions(CompressingTermVectorsReader.java:637)
at org.apache.lucene.codecs.compressing.CompressingTermVectorsReader.get(CompressingTermVectorsReader.java:432)
at org.apache.lucene.codecs.compressing.CompressingTermVectorsWriter.merge(CompressingTermVectorsWriter.java:834)
at org.apache.lucene.index.SegmentMerger.mergeVectors(SegmentMerger.java:224)
at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:158)
at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4443)
at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4083)
at org.apache.lucene.index.IndexWriter.maybeMerge(IndexWriter.java:2247)
at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3471)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3423)
java.lang.AssertionError
org.apache.lucene.codecs.compressing.CompressingTermVectorsReader.get(CompressingTermVectorsReader.java:321)
org.apache.lucene.codecs.compressing.CompressingTermVectorsWriter.merge(CompressingTermVectorsWriter.java:834)
org.apache.lucene.index.SegmentMerger.mergeVectors(SegmentMerger.java:224)
org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:158)
org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4443)
org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:4083)