Использование нескольких настроек базы данных с Lucene.Net

#lucene.net #indexing #nhibernate.search

#lucene.net #индексирование #nhibernate.search

Вопрос:

Привет, я разрабатываю функцию поиска для веб-приложения с Lucene.Net и NHibernate.Поиск. Приложение используется множеством компаний, но запускается как единый сервис, используя разные базы данных для разных компаний. Поэтому мне понадобился бы каталог индексов для каждой базы данных, а не один каталог для всего приложения. Есть ли способ достичь этого в Lucene.Net ?

Я также рассматриваю возможность сохранения индексов для каждой компании в соответствующей базе данных, но не нашел для этого никаких удовлетворяющих компонентов. Я читал о Compass и JdbcDirectory для Java, но мне нужно что-то для C # или NHibernate. Кто-нибудь знает, есть ли порт JdbcDirectory или что-то похожее для C #?

Комментарии:

1. Понятия не имею, сможете ли вы добраться туда с помощью nhibernate search, но вы могли бы легко сделать это с помощью Lucene. ИЗНАЧАЛЬНО NET, но для этого потребуется немного кодирования.

Ответ №1:

Хм, похоже, вы ничего не можете изменить на уровне фабрики сеанса, используя обычный nhibernate.search. Возможно, вам понадобятся отдельные экземпляры конфигурации или, возможно, попробуйте что-то вроде беглого поиска в NHibernate, чтобы облегчить задачу.

Собирая это вместе из wiki проекта, кажется, что вы могли бы сделать что-то вроде этого, чтобы развернуть отдельные фабрики сеансов, указывающие на разные базы данных / индексные каталоги:

 Fluently.Configure()
    .Database(SQLiteConfiguration.Standard.InMemory())
    .Search(s => s.DefaultAnalyzer().Standard()
                             .DirectoryProvider().FSDirectory()
                             .IndexBase("~/Index")
                             .IndexingStrategy().Event()
                             .MappingClass<LibrarySearchMapping>())
    .BuildConfiguration()
    .BuildSessionFactory();
  

Свойство «IndexBase» и соединение — это части, которые вам нужно будет определить для каждого клиента. Как только вы настроите фабрики сеансов, вы сможете разрешить их, используя любую стратегию, которую вы используете в настоящее время.

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

Комментарии:

1. Спасибо, это решило проблему. Я просто настраиваю разные IndexBase: es для каждой компании / пользователя. Кажется, работает действительно гладко

2. Потрясающе, я не использовал Fluent NHibernate search, но я рад слышать, что это работает хорошо. Мне нравится идея получения конфигурации поля из атрибутов, это было одной из моих главных проблем с NHibernate. Поиск.