提问者:小点点

Lucene和如何测量索引碎片


我们正在使用Lucene 2.9.2(计划升级到3. x),搜索查询会随着时间的推移而变慢,这是一个已知的事实。通常我们会执行完整的重新索引。我已经阅读了问题https://stackoverflow.com/a/668453/356815及其答案,现在就回答:我们不使用优化(),因为运行它时性能不再可以接受。

破碎?

我想知道以下几点:衡量现有索引碎片化的最佳做法是什么?卢克能帮我吗?

听听大家对这个分析题目的想法会很有意思。

关于我们指数的更多信息:

  • 我们已经索引了 400'000 个文档
  • 我们大量使用每个文档的属性
  • 对于每个请求,我们创建一个新的搜索器对象(因为我们希望更改立即出现在搜索结果中)
  • 查询性能介于 30 毫秒(重复相同的搜索)和 10 秒(复杂)之间
  • 该索引由 44 个文件(15 个 .del 文件,24 个 cfs 文件)组成,大小为 1GB

共1个答案

匿名用户

旧版本的Lucene不能有效地处理大量段。这就是为什么有些人建议优化(将所有段合并在一起)以提高搜索性能的原因。

最近版本的Lucene就不那么真实了。事实上,优化已经被重命名为听起来不那么神奇了(你现在需要调用forceMerge(1)),总是合并段甚至被认为是有害的(看看Lucene开发人员Simon Willnauer的这篇漂亮文章)。

对于每个请求,我们创建一个新的搜索器对象

打开阅读器是非常昂贵的。您应该使用SearcherManager,它将帮助您仅在必要时重新打开(增量打开)索引。