gpt4 book ai didi

c# - Lucene.Net 写/读同步

转载 作者:可可西里 更新时间:2023-11-01 08:58:35 29 4
gpt4 key购买 nike

  1. 我可以在打开索引(使用 IndexReader)时将新文档写入(使用 IndexWriter)吗?还是必须在写作之前关闭阅读?

  2. 当索引打开用于写入(使用 IndexWriter)时,我可以在索引中读取/搜索文档(使用 IndexReader)吗?还是我必须在阅读之前关闭写作?

  3. Lucene.Net 线程是否安全?还是必须自己写?

最佳答案

您可以随时打开任意数量的阅读器/搜索器,但只能打开一个写入器。这是由目录特定的锁强制执行的,通常涉及名为“write.lock”的文件。

读者打开快照,作者向索引添加更多数据。在您的作者提交 (IndexWriter.Commit) 数据后,需要打开或重新打开 (IndexReader.Reopen) 读者才能看到它,除非您正在使用近实时搜索。这涉及一个从 (IndexWriter.GetReader) 返回的特殊阅读器,它将能够看到执行调用 GetReader 时的内容。这也意味着,由于应用程序逻辑调用 IndexWriter.Rollback,读者可能会看到永远不会提交的数据。

搜索者使用阅读器,因此对这些有相同的限制。 (它们的数量不受限制,只能看到已经提交的内容,除非基于近实时阅读器。)

Lucene 是线程安全的,最佳做法是在多个线程之间共享读取器和搜索器,同时检查 IndexReader.IsCurrent() == true。您可以运行一个后台线程,一旦它检测到更改就会重新打开阅读器,创建一个新的搜索器,然后让主线程使用它。一旦新搜索器就位,这还允许您预热您使用的任何 FieldCache 以提高搜索速度。

关于c# - Lucene.Net 写/读同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5420566/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com