我正在尝试将数据库中已有的大约 21,000 个实体添加到 nhibernate-search Lucene 索引中。完成后,索引大约为 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 的选项。
会议清除和驱逐只是我绝望的举动-我还没有看到它们以某种方式产生影响。
有没有人成功地快速索引大量现有数据?