c# – Lucene.Net写/读同步
发布时间:2020-12-15 06:23:25 所属栏目:百科 来源:网络整理
导读:可以在打开阅读时使用IndexWriter(IndexWriter)将新文档写入索引(使用IndexReader)?还是在写作之前我要仔细阅读吗? 可以在索引中读取/搜索文档(使用IndexReader)打开它(使用IndexWriter)吗?或者我必须在阅读之前关闭写作? Lucene.Net线程是否安全?还是
>可以在打开阅读时使用IndexWriter(IndexWriter)将新文档写入索引(使用IndexReader)?还是在写作之前我要仔细阅读吗?
>可以在索引中读取/搜索文档(使用IndexReader)打开它(使用IndexWriter)吗?或者我必须在阅读之前关闭写作? Lucene.Net线程是否安全?还是我自己写? 解决方法
您可能会随时开放任何数量的读者/搜索者,但只有一位作家.这是由目录特定的锁执行的,通常涉及一个名为“write.lock”的文件.
读者打开快照,作者将更多的数据添加到索引.在您的作者提交(IndexWriter.Commit)数据后,读者需要打开或重新打开(IndexReader.Reopen)才能看到,除非您使用近实时搜索.这涉及从(IndexWriter.GetReader)返回的特殊读者,它将能够在GetReader的调用执行之前查看内容.这也意味着读者可能会看到由于应用程序逻辑调用IndexWriter.Rollback而永远不会被提交的数据. 搜索者使用读者,对这些相同的限制. (无限数量,只能看到已经提交的内容,除非是基于近实时阅读器.) Lucene是线程安全的,最佳实践是在多个线程之间共享读者和搜索者,同时检查IndexReader.IsCurrent()== true.您可以有一个后台线程运行,一旦检测到更改,重新打开读取器,创建一个新的搜索器,然后让主线程使用它.一旦新的搜索器到位,这也可以预先使用您使用的FieldCache来提高搜索速度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |