我有7个实体类要使用Hibernate搜索进行索引。在尝试了MassIndexer和FlushToIndexes之后,索引器过程在最小的实体/表中翻滚,但是最大的实体/表没有完成,尽管MassIndexerProgressMonitor告诉索引完成了。当进程达到分配的100-200 MB时,进程就会挂起。我想确保索引过程正确结束。
问题:代码正确吗?应该调优hibernate还是数据库设置?
环境:64位Windows 7,JBoss,Struts2,Hibernate,Hibernate搜索,Lucene,Server.Hibernate搜索索引放在文件系统中。
MassIndexer代码示例:
final Session session = HibernateSessionFactory.getSession();
final FullTextSession fullTextSession = Search.getFullTextSession(session);
MassIndexerProgressMonitor monitor = new IndexProgressMonitor("Kanalregister");
fullTextSession.createIndexer()
.purgeAllOnStart(true)
.progressMonitor(monitor)
.batchSizeToLoadObjects(BATCH_SIZE) // 250000
.startAndWait();FlushToIndexes代码示例:(来自Hibernate参考文献)。(博士)(似乎索引ok,但永远不会结束)
final Session session = HibernateSessionFactory.getSession();
final FullTextSession fullTextSession = Search.getFullTextSession(session);
fullTextSession.setFlushMode(FlushMode.MANUAL);
fullTextSession.setCacheMode(CacheMode.IGNORE);
Transaction t1 = fullTextSession.beginTransaction();
// Scrollable results will avoid loading too many objects in memory
ScrollableResults results = fullTextSession.createCriteria(Land.class)
.setFetchSize(BATCH_SIZE) // 250000
.scroll(ScrollMode.FORWARD_ONLY);
int index = 0;
while (results.next()) {
index++;
fullTextSession.index(results.get(0)); // index each element
if (index % BATCH_SIZE == 0) {
fullTextSession.flushToIndexes(); // apply changes to indexes
fullTextSession.clear(); // free memory since the queue is processed
}
}
t1.commit();使用hibernate.cfg.xml中的以下设置,在模拟所有索引工作时,将验证代码是否结束:
<property name="hibernate.search.default.worker.backend">blackhole</property>发布于 2013-01-03 14:22:45
上面的代码被验证和正确。
我的控制台没有结束的问题被认为与Eclipse有关,因为main()末尾的打印输出确实被显示出来了。
有些实体类(在我的模型中)没有正确报告。一旦我收到通知并将它们添加到我的模型中,MassIndexer的索引过程就成功地结束了,lucene索引中每个目录中的3+文件就是证明。
https://stackoverflow.com/questions/14136154
复制相似问题