Я на самом деле недавно столкнулся с этой самой проблемой. В первую очередь потому, что мы использовали общий доступ к нескольким веб-приложениям для обновления индексов в реальном времени. Однако мы пострадали от искажения индекса и не могли понять, почему, а также из-за того факта, что он не будет работать в кластерной среде.
Мой подход заключался в следующем: использовать сервис, который схематически индексирует новые сущности с очень частыми интервалами, а также переиндексировать все через определенные промежутки времени. Я также автоматически запускаю оптимизацию, поскольку NHSearch, похоже, еще не поддерживает автоматическую оптимизацию.
При запуске приложения я индексирую все в RAMDirectoryProvider.
Выбор, который вы делаете, во многом зависит от данных, которые вы хотите проиндексировать, и от того, насколько вы чувствительны к задержкам в этих данных, а также от того, насколько часто они изменяются. В моем случае это было разрешить поиск текста среди данных о продукте для веб-сайта, поэтому любая задержка меня устраивала.
Я провел небольшое исследование о поставщиках Master-Slave, однако, думаю, мне показалось, что NHSearch - это скорее образ, а не оригинальная Java-реализация.
Для меня оптимальным решением было бы иметь поставщика Master-Master, который бы перекрестно применял все обновления индекса на всех узлах. Я не исследовал, сколько было бы работы, чтобы написать DirectoryProvider самостоятельно, но это был бы вариант, но также много усилий.