首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate搜索索引程序在半工作后挂起

Hibernate搜索索引程序在半工作后挂起
EN

Stack Overflow用户
提问于 2013-01-03 09:33:05
回答 1查看 1.4K关注 0票数 0

我有7个实体类要使用Hibernate搜索进行索引。在尝试了MassIndexer和FlushToIndexes之后,索引器过程在最小的实体/表中翻滚,但是最大的实体/表没有完成,尽管MassIndexerProgressMonitor告诉索引完成了。当进程达到分配的100-200 MB时,进程就会挂起。我想确保索引过程正确结束。

问题:代码正确吗?应该调优hibernate还是数据库设置?

环境:64位Windows 7,JBoss,Struts2,Hibernate,Hibernate搜索,Lucene,Server.Hibernate搜索索引放在文件系统中。

MassIndexer代码示例:

代码语言:javascript
运行
复制
  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,但永远不会结束)

代码语言:javascript
运行
复制
  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中的以下设置,在模拟所有索引工作时,将验证代码是否结束:

代码语言:javascript
运行
复制
  <property name="hibernate.search.default.worker.backend">blackhole</property>
EN

回答 1

Stack Overflow用户

发布于 2013-01-03 14:22:45

上面的代码被验证和正确。

我的控制台没有结束的问题被认为与Eclipse有关,因为main()末尾的打印输出确实被显示出来了。

有些实体类(在我的模型中)没有正确报告。一旦我收到通知并将它们添加到我的模型中,MassIndexer的索引过程就成功地结束了,lucene索引中每个目录中的3+文件就是证明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14136154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档