Вместо кэширования indexSearcher, теперь я кеширую IndexReader.
Если IndexReader уже находится в кэше, я проверяю его актуальность. В противном случае я открываю его и передаю этот экземпляр конструктору indexSearcher.
Имеет ли смысл эта логика / код по сравнению с оптимизированным ответом на поисковый запрос, если несколько запросов попадают на веб-сервер для поиска?
Спасибо за чтение.
string key = MyConstants.CacheKey.IndexReader;
indexReader = MyCacheManager.Get<IndexReader>(key);
if (indexReader == null)//cache is empty.open indexreader
{
indexReader = IndexReader.Open(myIndexFolderPath);
MyCacheManager.Add(key, indexReader);
indexSearcher = new IndexSearcher(indexReader);
}
else//cache contains indexreader...check if it is up to date
{
indexSearcher = base.GetIndexSearcher(myIndexFolderPath, indexReader);
}
protected IndexSearcher GetIndexSearcher(string indexFolderPath, IndexReader indexReader)
{
IndexSearcher indexSearcher = null;
if (!indexReader.IsCurrent())//index is not up to date
{
indexReader = IndexReader.Open(indexFolderPath);
indexSearcher = new IndexSearcher(indexReader);
}
else
{
indexSearcher = new IndexSearcher(indexReader);
}
return indexSearcher;
}