2
我有一个应用程序需要能够同时读取和写入搜索索引。我在lucene中注意到的是,你不能同时使用IndexWriter和DirectoryReader。基本上是:Lucene并发读写
IndexWriter writer = new IndexWriter(directory, config);
//Add documents here...
writer.commit();
DirectoryReader reader = DirectoryReader.open(writer.getDirectory());
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser qp = new QueryParser(Version.LUCENE_46,"field", new StandardAnalyzer(Version.LUCENE_46));
qp.setAllowLeadingWildcard(true);
Query q = qp.parse("field:*");
正常工作,而
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46, new StandardAnalyzer(Version.LUCENE_46));
IndexWriter writer = new IndexWriter(directory, config);
writer.commit();
DirectoryReader reader = DirectoryReader.open(writer.getDirectory());
//Add documents here
writer.commit();
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser qp = new QueryParser(Version.LUCENE_46,"field", new StandardAnalyzer(Version.LUCENE_46));
qp.setAllowLeadingWildcard(true);
Query q = qp.parse("field:*");
不会在所有的工作。
每次提交后我都必须重新打开DirectoryReader吗?
是的,你必须重新打开。另一种方法是近实时阅读器。看看这个博客条目:http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html –