0

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

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

一些背景

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

谢谢!

克里斯

4

2 回答 2

0

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

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

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

所以我对你的建议是为每个查询创建一个IndexSearcher(完成工作后摆脱资源)。如果您的业务案例可以使用。

于 2014-01-26T18:13:10.313 回答
0

你用的是哪个目录?

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

另一种选择是按照http://jprante.github.io/applications/2012/07/26/Mmap-with-Lucene.htmlmlockall中的说明 使用。

于 2014-01-27T09:46:41.763 回答