【问题标题】:Best strategy for committing and optimizing documents in Lucenet.Net?在 Lucenet.Net 中提交和优化文档的最佳策略?
【发布时间】:2013-08-28 05:11:45
【问题描述】:

我对什么与性能和最佳实践有更好的相关性有一些疑问。

我的系统会这样做:

  1. 按文档插入和更新,或
  2. 批量文档插入

据我所知(在以前的系统中)#2 是直截了当的:

  • 批量删除旧文档并添加新文档,最多 10k 个文档,每个文档不超过 20 个字段
  • 提交
  • 优化

但#1 仍然让我感到困惑,因为一些客户会一一添加文档。

每次插入和更新时提交和优化的惩罚是什么?或者我可以忽略它,因为它每天只发生 20 次?

Java 版本是 3.5,.net 版本是 3.03

我刚看到a blog post,想知道社区有什么要说的。

【问题讨论】:

  • 您对更新后的文档多久出现在搜索结果中有什么要求?这将告诉我们我们想要提交的频率。是的,此时优化几乎是不必要的。
  • 是你的索引吗?你的索引在内存中吗?优化每 20 个文档是多余的……如果您真的想在凌晨 2 点或下班时间对其进行优化。
  • 如果服务器出现故障或应用程序因任何原因崩溃,则需要保留索引,以便保留在文件系统中。该索引将服务于文档搜索。问题是它将主要托管在共享主机上,因此我没有访问计划来按时优化例程或脚本。

标签: c# asp.net-mvc lucene.net


【解决方案1】:

我认为根本不需要 .Optimize() 。 Lucene 将自动处理段合并,您可以提供自己的逻辑来更改合并的计算方式。当 10% 的文档被标记为删除时,您可以编写一些合并已删除文档的内容。 Lucene 的功能无需合并每个已删除的文档。

当然,您最终会得到更多的段文件,并且它们会消耗文件描述符,但是您是否遇到过打开太多文件的问题?我尝试使用谷歌搜索 Windows 服务器安装上打开文件的最大数量,但答案从几千到受可用内存限制不等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多