在RAMDirectory

时间:2017-03-04 08:11:42

标签: java lucene

我正在使用Lucene创建一个基于概念的图像搜索引擎。首先,我打开我的数据库并将其复制到RAM索引中。然后我写一个分析器来查找用户输入字及其同义词。最后,我想打开索引来获得结果。

getImage() - 用于将addDoc()复制数据库调用到我的索引

这是getImageResult(),我想用它来获得结果。我想也许这就是错误。

但是,如果我删除:

StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);

IndexWriter iwriter = new IndexWriter(index, config);
iwriter.commit();

它会引发异常:在RAMDirectory中找不到segment *文件。 如果我保留这部分,我就无法得到任何结果。

1 个答案:

答案 0 :(得分:0)

我不完全确定,但我认为你试图用你的第一个片段写入索引,然后用第二个片段搜索,对吗?

您在全新目录中打开全新索引的getImageResult()方法。之前写入不同RAMDirectory的任何内容都无法在那里搜索。

你应该:

  • 在两个地方使用相同的 RAMDirectory
  • FSDirectory中打开索引,将其保存到文件系统,然后重新打开。请参阅FSDirectory.open