Использование нескольких настроек базы данных с 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" и соединение - это части, которые вам нужно определить для каждого клиента. Как только вы настроите сессионные фабрики, вы сможете решить их, используя любую стратегию, которую вы используете в настоящее время.

Надеюсь, поможет

Другие вопросы по тегам