# some java_imports here
index = RAMDirectory.new
IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30), IndexWriter::MaxFieldLength::UNLIMITED )
IndexSearcher.new(index)

产生
NativeException: org.apache.lucene.index.IndexNotFoundException: no segments* file found in org.apache.lucene.store.RAMDirectory@668c640e lockFactory=org.apache.lucene.store.SingleInstanceLockFactory@afd07bb: files: []

为什么会这样?

最佳答案

IndexSearcher需要一个特殊的目录结构,该目录结构无法找到,因为未写入任何段(将文档添加到IndexWriter时,它们在内存中排队,并且当已用内存量达到给定阈值或commit()为这些内存中的数据结构被刷新到磁盘,从而导致Lucene称之为段)。

您需要做的是通过在打开IndexSearcher之前调用commit来显式创建一个段。

index = RAMDirectory.new
writer = IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30),IndexWriter::MaxFieldLength::UNLIMITED)
writer.commit()
IndexSearcher.new(index)

此外,在Lucene 3.4中不推荐使用此IndexWriter构造函数,您应该使用IndexWriterConfig来配置IndexWriter:
iwConfig = IndexWriterConfig.new(Version::LUCENE_34, StandardAnalyzer.new(Version::LUCENE_34))
writer = IndexWriter.new(index, iwConfig)

关于exception - 如果在空的RAMDirectory上调用IndexSearcher,则为IndexNotFoundException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8263110/

10-09 23:23