Использование нескольких настроек базы данных с Lucene.Net
Привет, я разрабатываю функцию поиска для веб-приложения с Lucene.Net и NHibernate.Search. Приложение используется многими компаниями, но запускается как единый сервис, использующий разные базы данных для разных компаний. Поэтому мне потребуется каталог индекса для каждой базы данных, а не один каталог для всего приложения. Есть ли способ достичь этого в Lucene.Net?
Я также рассмотрел вопрос о сохранении индексов для каждой компании в соответствующей базе данных, но не нашел подходящих компонентов для этого. Я читал о Compass и JdbcDirectory для Java, но мне нужно что-то для C# или NHibernate. Кто-нибудь знает, есть ли порт JdbcDirectory или что-то подобное для C#?
1 ответ
Хм, похоже, что вы ничего не можете изменить на уровне фабрики сессий, используя обычный nhibernate.search. Вам могут потребоваться отдельные экземпляры конфигурации, или, возможно, попробовать что-то вроде Fluent NHibernate Search, чтобы облегчить боль.
Собирая все воедино из вики проекта, можно сделать что-то вроде этого, чтобы раскрутить отдельные фабрики сессий, указывающие на разные каталоги баз данных / индексов:
Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory())
.Search(s => s.DefaultAnalyzer().Standard()
.DirectoryProvider().FSDirectory()
.IndexBase("~/Index")
.IndexingStrategy().Event()
.MappingClass<LibrarySearchMapping>())
.BuildConfiguration()
.BuildSessionFactory();
Свойство "IndexBase" и соединение - это части, которые вам нужно определить для каждого клиента. Как только вы настроите сессионные фабрики, вы сможете решить их, используя любую стратегию, которую вы используете в настоящее время.
Надеюсь, поможет