Greetings to all.
I have read at so many places that we should not open a Searcher for each
request for the sake of performance, but I have always been wondering
whether it is actually Searcher or Reader?
I have a group of index amounting to 23G which actually contains of
different index directories. The structure is something like following
Main directory
|
|_________ country1
| |___ country1-time1 (actual index)
| |___ country1-time2 (actual index)
| |___ country1-time3 (actual index)
|
|_________ country2
|___ country2-time1 (actual index)
|___ country2-time2 (actual index)
|___ country2-time3 (actual index)
When application starts I open IndexReaders on all of actual index
directories (country1-time1, country1-tim2, .... country2-time3) and keep
them in a pool.
At the time of search, IndexSearchers are created by selecting the
appropriate IndexReaders from the pool. These IndexSearchers in turn are
used to create a ParallelMultiSearcher. Constructors of IndexSearcher and
ParallelMultiSearcher are run for every request.
Now I believe that creating a pool of ParallelMultiSearcher itself is a
good idea but* I wanted to know if reopening **IndexSearchers** will really
degrade performance irrespective of **IndexReaders** being opened once*.
In my performance tests (which may not be very comprehensive) I didn't find
any noticeable difference.
Please throw some light.
--
Regards,
Samar