【发布时间】:2014-02-28 08:48:16
【问题描述】:
我有一个需要能够同时读取和写入搜索索引的应用程序。我注意到 lucene 是你不能同时使用 IndexWriter 和 DirectoryReader。基本上:
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?
【问题讨论】:
-
是的,您必须重新打开。另一种选择是近实时阅读器。查看此博客条目:blog.mikemccandless.com/2011/11/…
标签: java concurrency lucene