Я пытаюсь добавить около 21 000 объектов уже в базе данных в индекс Lucene nhibernate-search. Когда закончите, индексы около 12 мегабайт. Я думаю, что время может немного отличаться, но оно всегда очень медленное. В моем последнем запуске (работающем с отладчиком) индексация данных заняла более 12 минут.
private void IndexProducts(ISessionFactory sessionFactory)
{
using (var hibernateSession = sessionFactory.GetCurrentSession())
using (var luceneSession = Search.CreateFullTextSession(hibernateSession))
{
var tx = luceneSession.BeginTransaction();
foreach (var prod in hibernateSession.Query<Product>())
{
luceneSession.Index(prod);
hibernateSession.Evict(prod);
}
hibernateSession.Clear();
tx.Commit();
}
}
Подавляющее большинство времени проводится в tx.Commit (). Из того, что я читал о поиске в Hibernate, этого следовало ожидать. Я встречал немало способов помочь, таких как MassIndexer, flushToIndexes, пакетные режимы и т. Д. Но, насколько я могу судить, это только опции Java.
Ясное и чистое занятие - это просто отчаянные шаги со стороны меня - я не видел, чтобы они так или иначе имели значение.
Успешно ли кто-нибудь быстро проиндексировал большое количество существующих данных?