Using the SearcherManager to refresh IndexSearcher
The SearcherManager
is a utility class that facilitates the sharing of IndexSearcher
across multiple threads. It provides the facilities to acquire and release IndexSearcher
, while allowing IndexSearcher
to be reopened periodically. The IndexSearcher
attribute can be refreshed by calling maybeRefresh
prior to acquire, though it's recommended that this method be called periodically in a separate thread to minimize impacting a query that happens to trigger a refresh. Note that it's very important to call release
so SearcherManager
knows when IndexSearcher
is not in use so that it can be closed for a refresh.
The following diagram shows SearcherManager's main responsibilities:
The SearcherManager's
constructor takes three arguments: an IndexWriter
, a Boolean indicating whether to apply uncommitted deletes, and a SearcherFactory
. In our example, we will use the built-in SearcherFactory
. The SearcherFactory
object can be extended to include custom...