Java 我应该多久重新加热一次Lucene索引?

Java 我应该多久重新加热一次Lucene索引?,java,lucene,indexing,warm-up,Java,Lucene,Indexing,Warm Up,我想知道是否还有其他人有过同样的Lucene(而不是Solr)情况 当我打开一个Lucene索引时,我用一个典型的查询对它进行预热,然后将搜索程序缓存一段时间,以便许多查询可以使用它。然后我重新打开它并重复。因为我在Linux上运行Lucene 3.6,据我所知,我的大多数开放索引数据都驻留在文件系统缓存中,而不是JVM堆中。我发现查询的响应时间会随着时间的推移而增加——除非我通过重新运行我的典型查询来重新加热搜索者。 还有其他人有这个问题吗?如果是这样的话,重新升温是否是让他保持回应的唯一途径

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

当我打开一个Lucene索引时,我用一个典型的查询对它进行预热,然后将搜索程序缓存一段时间,以便许多查询可以使用它。然后我重新打开它并重复。因为我在Linux上运行Lucene 3.6,据我所知,我的大多数开放索引数据都驻留在文件系统缓存中,而不是JVM堆中。我发现查询的响应时间会随着时间的推移而增加——除非我通过重新运行我的典型查询来重新加热搜索者。 还有其他人有这个问题吗?如果是这样的话,重新升温是否是让他保持回应的唯一途径?多久一次效果最好

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


Chris

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

所以我认为每次你在一个新的查询中加热你的搜索者时,你的操作系统都会缓存该查询检索到的所有文件,所以如果你在同一个查询中加热搜索者,它会快速检索,但是如果在另一个查询中加热搜索者,那么你的操作系统需要再次缓存文件,因为它的文件不同。这对你的操作系统资源来说真的是一个过头的问题

但我真的很想知道为什么你想让你的读者保留一段时间,我想说的是,如果搜索查询来自用户,重复同一查询的百分比非常低,而且创建一个新的
索引搜索器
对象也不是这样的成本


因此,我给您的建议是为每个查询创建一个
indexsearch
(一旦完成任务,就把资源去掉)。如果您的商业案例可以处理这个问题。

您使用的是哪个目录

如前所述,您可以尝试使用
swappiness


另一种选择是使用
mlockall
,如中所述。

Hi Mindas,感谢您的回复。我在64位Linux上使用FSDirectory,这意味着MMapDirectory。我还将交换设置为0。所以,除非我误解了这些文章,否则我已经在做正确的事情了?从你的描述来看,这一切似乎都是正确的。您是否可以连接一个探查器并进行一些CPU评测以查看时间花在哪里?