我是 Lucene.NET 的新手,但我正在使用一个开源工具 http://trac.sitecore.net/AdvancedDatabaseCrawler/为Sitecore CMS http://www.sitecore.net它使用 Lucene.NET 对 CMS 中的大量内容进行索引。我昨天确认,当我重建索引时,当前的索引文件会被擦除干净,因此任何依赖于该索引的内容在大约 30-60 秒(完整索引重建的时间)内不会获取任何数据。是否有最佳实践或方法使 Lucene.NET 在新索引完全重建之前不会覆盖当前索引文件?我基本上认为我希望它写入新的临时索引文件,并且当重建完成时让这些文件覆盖当前索引。
我正在谈论的示例:
- 建立新索引(约 30 秒)
- 索引大约有 500 个文档
- 使用代码访问索引中的数据并显示在网站上
- Rebuild index (~30 seconds)
- 现在读取数据索引的任何代码都不会返回任何内容,因为索引文件正在被覆盖;结果网站不显示任何数据
- 重建完成:数据现在再次可用,数据返回网站
提前致谢
我对“Sitecore”本身没有任何经验,但这是我的故事。
我们最近为我们的电子商务子系统引入了基于索引的搜索(使用 Lucene.Net)。我们的案例的索引更新过程可能需要大约半小时(约 50,000 个产品本身 + 许多相关信息)。为了防止在索引更新期间出现“拒绝服务”响应,我们首先创建索引的“备份”版本(只需将索引目录复制到另一个位置),并且所有进一步的请求都将重定向以使用此“备份”版本。索引更新完成后,我们删除备份,以便客户端开始使用索引的更新(或“实时”)版本。如果在更新过程中可能发生任何未处理的异常,这也很有帮助,因为您最终可能会遇到根本没有索引的情况(在我们的情况下,客户端始终可以使用“备份”版本)。
The API参考 http://lucene.apache.org/lucene.net/docs/2.4.0/Lucene.Net.Index.IndexWriter.html#IndexWriter%28org.apache.lucene.store.Directory,%20org.apache.lucene.analysis.Analyzer,%20bool%29(Lucene 2.4)的Lucene.Net.Index.IndexWriter
对象声明如下:
请注意,您可以使用以下命令打开索引create=true
即使读者在
使用索引。老读者会
继续搜索“时间点”
他们已经打开的快照,但不会
查看新创建的索引,直到它们
重新开放。
因此,至少您不应该担心当前正在您的索引中搜索的客户端。
希望这会帮助您做出正确的决定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)