c# – Lucene.Net写/读同步

前端之家收集整理的这篇文章主要介绍了c# – 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来提高搜索速度.

猜你在找的C#相关文章