首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果IndexSearcher在空RAMDirectory上调用,则为IndexNotFoundException

如果IndexSearcher在空RAMDirectory上调用,则为IndexNotFoundException
EN

Stack Overflow用户
提问于 2011-11-25 06:35:51
回答 2查看 4K关注 0票数 6
代码语言:javascript
复制
# some java_imports here
index = RAMDirectory.new
IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30), IndexWriter::MaxFieldLength::UNLIMITED )
IndexSearcher.new(index)

生成

代码语言:javascript
复制
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: []

这一切为什么要发生?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-28 19:04:46

IndexSearcher需要一个特殊的目录结构,它无法找到它,因为没有段被写入(当您向IndexWriter添加文档时,它们在内存中排队,并且当使用的内存量达到给定的阈值或当调用commit()时,这些内存中的数据结构被刷新到磁盘,从而产生Lucene所说的段)。

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

代码语言:javascript
复制
index = RAMDirectory.new
writer = IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30),IndexWriter::MaxFieldLength::UNLIMITED)
writer.commit()
IndexSearcher.new(index)

此外,这个IndexWriter构造函数在Lucene 3.4中被弃用了,你应该使用IndexWriterConfig来配置你的IndexWriter:

代码语言:javascript
复制
iwConfig = IndexWriterConfig.new(Version::LUCENE_34, StandardAnalyzer.new(Version::LUCENE_34))
writer = IndexWriter.new(index, iwConfig)
票数 11
EN

Stack Overflow用户

发布于 2013-12-25 04:19:04

与调用显式提交不同,您可以确保关闭IndexWriter,它应该隐式提交并关闭Lucene4中的资源

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8263110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档