Давайте предположим, что у меня есть базовые знания по добавлению и поиску документов.
Каков наилучший способ управления экземплярами IndexWriter и IndexReader?
В настоящее время мое приложение создает одноэлементный экземпляр IndexWriter. Когда мне нужно выполнить поиск, я просто создаю IndexSearcher из IndexWriter, используя следующую команду
var searcher = new IndexSearcher(writer.GetReader())
Я делаю это, потому что создание нового IndexReader заставляет индекс загружаться в память, а затем ожидает, когда GC перераспределит память. Это вызывало ошибки нехватки памяти.
Эта текущая реализация считается идеальной? Эта реализация решила проблему с памятью, но есть проблема с постоянно существующим файлом write.lock (потому что IndexWriter всегда создается и открывается). Вот трассировка стека ошибок, которые я получаю в приложении.
Время ожидания блокировки:
NativeFSLock @ C: \ Inetpub \ Wwwroot \ htdocs_beta \ App_Data \ продукты3 \ write.lock:
System.IO.IOException: процесс
не может получить доступ к файлу
'C: \ Inetpub \ Wwwroot \ htdocs_beta \ App_Data \ продукты3 \ write.lock'
потому что он используется другим
процесс. в
System.IO .__ Error.WinIOError (Int32
errorCode, String MaybeFullPath) в
System.IO.FileStream.Init (Строковый путь,
Режим FileMode, доступ к FileAccess,
Права Int32, логические права использования,
Общий доступ к FileShare, размер буфера Int32,
Опции FileOptions,
SECURITY_ATTRIBUTES secAttrs, String
msgPath, логическое значение bFromProxy, логическое значение
useLongPath) в
System.IO.FileStream..ctor (String
путь, режим FileMode, FileAccess
доступ) в
Lucene.Net.Store.NativeFSLock.Obtain ()
Я думаю, может быть, было бы лучше создать одноэлементный экземпляр IndexSearcher для поиска, а затем создать IndexWriter по мере необходимости в памяти. Таким образом, файл write.lock будет создан / удален при обновлении индекса. Единственная проблема, с которой я сталкиваюсь, заключается в том, что экземпляр IndexSearcher устареет, и мне нужно будет запустить задачу, которая перезагрузит IndexSearcher, если индекс был обновлен.
Что вы думаете?
Как вы справляетесь с большим индексом при оперативном обновлении?