我想知道是否有其他人拥有相同的Lucene(不是Solr )情况?
当我打开一个Lucene索引时,我用一个典型的查询来加热它,然后让搜索器缓存一段时间,以便许多查询可以使用它。然后我重新打开它并重复。因为我在Linux上运行Lucene 3.6,据我所知,我的大部分开放索引数据都驻留在文件系统缓存而不是JVM堆中。我发现查询的响应时间随着时间的推移而增加 - 除非我通过重新运行我的典型查询来重新加热搜索器。 其他人遇到过这个问题吗?如果是这样,重新加温是保持他查询响应的唯一方法吗?多久效果最好?
谢谢!
克里斯
答案 0 :(得分:0)
我认为这个问题与lucene本身无关,我认为它是一个操作系统问题,因为你知道lucene正在使用java I / O库,它使用OS本机I / O方法。
所以我认为,每次你在一个新的查询中加热你的搜索者时,你的操作系统都会缓存该查询检索到的整个文件,所以如果你在同一个查询中重新加热搜索者,它会快速检索,但如果在另一个查询中温暖您的搜索者,那么您的操作系统需要再次缓存文件,因为它的文件不同。这对你的操作系统资源来说真是一个过头了。
但我真的很想知道为什么要让你的读者保持一段时间,我想说的是,如果搜索查询来自用户,重复相同查询的百分比非常弱,同时创建新的IndexSearcher
对象不是那么费用。
所以我的建议是为每个查询创建一个IndexSearcher
(完成作业后删除资源)。如果您的商业案例可以解决这个问题。
答案 1 :(得分:0)
您使用的是哪个目录?
您可以尝试按照http://wiki.apache.org/lucene-java/ImproveSearchingSpeed解释swappiness
。
另一种选择是使用mlockall
中解释的{{1}}。