我正在使用Lucene 5.2.1。
我想弄清楚我应该如何打开IndexReader
s IndexWriter
和IndexSearcher
以便我可以让我的索引在查询进行时不断写入项目上。
目前这是我的代码:
Path indexPath = Paths.get("index");
Directory dir = NIOFSDirectory.open(indexPath);
IndexWriterConfig iwc = new IndexWriterConfig(new StandardAnalyzer());
iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
IndexWriter indexWriter = new IndexWriter(dir, iwc);
IndexReader indexReader = DirectoryReader.open(indexWriter, false);
如果我启动我的应用并开始将文档放入索引,我可以查询。
但是,当我停止我的应用程序然后重新启动时,我观察的是索引目录被截断(因此以前添加到目录中的任何内容都会丢失)
答案 0 :(得分:0)
我没有在变量dir(NIOFSDirectory)上看到close(),在indexWriter(IndexWriter)上看到commit()和/或close()。您可能需要关闭这些以将其余数据刷新到文件中。
在NIOFSDirectory类中找到5.2.1的两个注释。第一个注释对Windows O / S非常重要。
注意:由于在Sun的JRE中实现FileChannel.read的方式存在错误,因此不建议在Windows上使用NIOFSDirectory。在实施内部,该位置显然是同步的。有关详细信息,请参阅此处。
注意:如果在线程被IO阻塞的同时,在线程中断时直接或间接从线程访问此类可以立即关闭基础文件描述符。文件描述符将保持关闭状态,随后对NIOFSDirectory的访问将引发ClosedChannelException。如果您的应用程序使用Thread.interrupt()或Future.cancel(boolean),您应该使用Lucene misc模块中的旧RAFDirectory来支持NIOFSDirectory。