search - Solr 中 IndexSearcher 的生命周期
问题描述
我想对IndexSearcher
Solr 的生命周期有更多的了解,我了解IndexSearcher
Lucene 会建议“出于性能原因,如果您的索引不变,您应该IndexSearcher
在多个搜索中共享一个实例,而不是为每个搜索创建一个新实例——搜索。” (Lucene 4.6.1)。
但是当事情来到带有 servlet 调度程序的 Java Webapp 中的 Solr 世界时。IndexSearcher
只要没有索引更改,我们是否还会继续重用同一个实例?
我看到“Hossman”有关于solr 搜索请求的生命周期的演讲,但他没有提到我们如何处理/清理indexsearcher
.
解决方案
原因是您不直接与 Lucene 的 IndexSearcher 交互。这是 Solr 的责任,并且作为 Solr 的用户远离您。
使用 Solr 时,您与搜索器交互的唯一方式是通过自动提交设置。
当发出提交或优化时,当前的索引读取器将被关闭并打开一个新的。发出这些命令时,您可以选择告诉 Solr 您要等到新搜索打开后再返回,从而确保您的更改已变得可见(通过waitSearcher
)。
除此之外,搜索器的生命周期(可以概括为“在对索引进行更改之前保持活动状态,然后重新打开一个新的”)完全隐藏在外部世界之外。