首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene中的并发读写

Lucene中的并发读写
EN

Stack Overflow用户
提问于 2014-02-28 08:48:16
回答 1查看 1.7K关注 0票数 2

我有一个应用程序,需要能够同时读写搜索索引。我在lucene中注意到的是,您不能同时使用IndexWriter和DirectoryReader。基本上:

代码语言:javascript
复制
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:*");

工作很好,而

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

EN

回答 1

Stack Overflow用户

发布于 2014-06-28 15:20:33

正如我们所看到的,两个片段的主要区别在于您从IndexWriter获得一个阅读器的时间,第一个是在writer.commit()之后。

当我们有一个阅读器时,这意味着我们已经得到了当前索引文件的一次快照,第二个readerIndexWriter.commit之前得到了一个“快照”,结果是基于该readerIndexSearcher不会找到IndexWriter刚才所做的更改,或者索引没有处于一致状态。

所以你应该重新打开DirectoryReader。希望这些能帮上忙!:D

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

https://stackoverflow.com/questions/22090256

复制
相关文章

相似问题

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