我应该多久重新调整一次Lucene索引?

时间:2014-01-26 11:39:29

标签: java lucene indexing warm-up

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

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

一些背景

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

谢谢!

克里斯

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

您使用的是哪个目录?

您可以尝试按照http://wiki.apache.org/lucene-java/ImproveSearchingSpeed解释swappiness

另一种选择是使用mlockall中解释的{{1}}。