【问题标题】:How often should I re-warm my Lucene index?我应该多久重新加热一次 Lucene 索引?
【发布时间】:2014-01-28 19:05:22
【问题描述】:

我想知道是否有其他人遇到过同样的 Lucene(不是 Solr)情况?

当我打开一个 Lucene 索引时,我用一个典型的查询对其进行预热,然后将搜索器缓存一段时间,以便许多查询可以使用它。然后我重新打开它并重复。因为我在 Linux 上运行 Lucene 3.6,据我了解,我的大部分开放索引数据都驻留在文件系统缓存中,而不是 JVM 堆中。我发现查询的响应时间会随着时间的推移而增加 - 除非我通过重新运行我的典型查询来不断重新加热搜索者。 其他人遇到过这个问题吗?如果是这样,重新加热是保持他查询响应的唯一方法吗?多久效果最好?

一些背景

  • 机器总是非常忙于处理其他非 Lucene 文件,这让我怀疑 F/S 缓存页面会随着时间的推移而被替换
  • 我的索引器与我的查询服务器不在同一个 JVM 中运行,因此 NRT 等不相关

谢谢!

克里斯

【问题讨论】:

    标签: java lucene indexing warm-up


    【解决方案1】:

    我认为这个问题与 lucene 本身无关,我认为它是一个操作系统问题,因为您知道 lucene 正在使用 java I/O 库,它使用操作系统本机 I/O 方法。

    所以我认为发生的情况是,每次您在新查询中预热搜索器时,您的操作系统都会缓存该查询检索到的整个文件,因此如果您在同一查询中重新预热搜索器,它将检索速度很快,但如果在另一个查询中温暖您的搜索者,那么您的操作系统需要再次缓存文件,因为它的文件不同。这确实是您的操作系统资源的开销。

    但我真的很想知道为什么要让你的读者停留一段时间,我想说的是,如果搜索查询来自用户,重复相同查询的百分比非常弱,也会造成一个新的IndexSearcher 对象并不是那么昂贵。

    所以我对您的建议是为每个查询创建一个IndexSearcher(完成工作后摆脱资源)。如果您的商业案例可以解决这个问题。

    【讨论】:

      【解决方案2】:

      你使用的是哪个目录?

      您可以按照http://wiki.apache.org/lucene-java/ImproveSearchingSpeed 的说明尝试使用swappiness

      另一种选择是使用mlockall,如http://jprante.github.io/applications/2012/07/26/Mmap-with-Lucene.html 中所述。

      【讨论】:

      • 您好 Mindas,感谢您的回复。我在 64 位 Linux 上使用 FSDirectory,这意味着 MMapDirectory。我也将 swappiness 设置为 0。所以除非我误解了这些文章,否则我已经在做正确的事情了吗?
      • 从你的描述来看,这一切似乎都是正确的。你能附加一个分析器并做一些 CPU 分析来查看时间花在哪里吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2014-07-07
      • 2011-01-17
      • 2019-09-27
      • 2012-11-16
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多