Csharp/C#教程:避免在重建期间删除当前的Lucene.NET索引分享


避免在重建期间删除当前的Lucene.NET索引

我是Lucene.NET的新手,但我使用的是为Sitecore CMS构建的开源工具 ,它使用Lucene.NET来索引来自CMS的大量内容。 我昨天确认当我重建我的索引时,当前的索引文件擦除干净,所以任何依赖索引的东西都没有大约30-60秒的数据(完整索引重建的时间)。 在新索引完全重建之前,是否有最佳实践或方法使Lucene.NET不会覆盖当前索引文件? 我基本上以为我想要写入新的临时索引文件,当重建完成时,这些文件会覆盖当前索引。

我在说什么的例子:

  • 重建完成:数据现在再次可用,数据返回网站
  • 提前致谢

    我没有“Sitecore”本身的经验,但这是我的故事。

    我们最近将基于索引的搜索(使用Lucene.Net)纳入我们的电子商务子系统。 我们案例的索引更新过程可能需要大约半个小时(大约50,000个产品本身+大量相关信息)。 为了防止在更新索引期间出现“拒绝服务”响应,我们首先创建它的“备份”版本(简单地将索引目录复制到另一个位置),并且所有进一步的请求都被重定向以使用此“备份”版本。 索引更新完成后,我们删除备份,以便客户端开始使用索引的更新(或“实时”)版本。 如果在更新过程中可能发生任何未处理的exception,这也有帮助,因为您可能最终处于根本没有索引的情况下(在我们的情况下,客户端总是可以使用“备份”版本)。

    Lucene.Net.Index.IndexWriter对象的API参考 (Lucene 2.4)声明如下:

    请注意,即使读者正在使用索引,您也可以使用create=true打开索引。 旧读者将继续搜索他们打开的“时间点”快照,并且在重新打开之前不会看到新创建的索引。

    所以至少你不应该担心目前在索引中搜索的客户端。

    希望这能帮助您做出正确的决定。

    我不熟悉那个sitecore工具,但是我可以回答你如何使用纯Lucene.Net:你应该使用NRT设置,这意味着“有一个索引编写器,永远不会关闭它”。

    基本上,索引编写器在内存中有一个“虚拟”索引,直到它被刷新到磁盘。 因此,只要你从作者那里得到你的读者,你就会总是看到最新的东西,即使它还没有被刷新到磁盘上。

    上述就是C#学习教程:避免在重建期间删除当前的Lucene.NET索引分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

    本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

    ctvol管理联系方式QQ:251552304

    本文章地址:https://www.ctvol.com/cdevelopment/957365.html

    (0)
    上一篇 2021年11月21日
    下一篇 2021年11月21日

    精彩推荐