lucene3.6.1 + IKAnalyzer 创建索引库性能问题!

时光荒羽 2012-08-29 03:51:01
分不够可以再加。
先做一下简要的说明:
我从数据库取出两万条数据,在创建索引库的时候 前一万条数据只需要1到3秒左右 后面就越来越慢 直到内存溢出“java.lang.OutOfMemoryError: Java heap space”

下面就贴出关键的代码


Directory dir = null;
IndexWriter indexWriter = null;
IndexWriterConfig conf = null;

Analyzer analyzer = new IKAnalyzer();
dir = FSDirectory.open(new File(INDEX_PATH));
conf = new IndexWriterConfig(Version.LUCENE_36, analyzer);

LogMergePolicy mergePolicy = new LogByteSizeMergePolicy();
//设置segment添加文档(Document)时的合并频率
mergePolicy.setMergeFactor(20);
//设置segment最大合并文档(Document)数
mergePolicy.setMaxMergeDocs(500);
//启用复合式索引文件格式,合并多个segment
mergePolicy.setUseCompoundFile(true);
conf.setMergePolicy(mergePolicy);
//设置索引的打开模式
conf.setOpenMode(OpenMode.CREATE_OR_APPEND);
//创建索引器
indexWriter = new IndexWriter(dir, conf);

ResultSet set = db.getResultSet("select id,subject,content,posted from news");
List<Document> docs = new ArrayList<Document>();
int i = 0;
//这里set里面有2万条数据
while (set.next())
{
Document doc = new Document();
doc.add(new Field("id", set.getString("id"), Store.YES, Index.NOT_ANALYZED));
doc.add(new Field("subject", set.getString("subject"), Store.YES, Index.ANALYZED));
doc.add(new Field("content", set.getString("content"), Store.YES, Index.ANALYZED));
doc.add(new Field("posted", DateTools.dateToString(set.getDate("posted"), DateTools.Resolution.DAY), Store.YES, Index.ANALYZED));
docs.add(doc);
if (i++ % 500 == 0)
{
indexWriter.addDocuments(docs);
System.out.println(docs.size());
docs.clear();
System.gc();
}
//indexWriter.addDocument(doc, analyzer);
//indexWriter.addDocument(doc);
}

...全文
285 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小丑哥_V5 2014-01-08
  • 打赏
  • 举报
回复
引用 3 楼 fengzhihangff 的回复:
indexWriter.commit() 仔细看类里的方法。你会发现里面有提交和回滚方法。也就是说,你添加了索引但是并没提交。所以到达一定限度内存就挂了。
大概如此了...没看到commit,跟数据差不多的做法,一组数据就commit数据,继续往下执行,分组commit不会出问题
fengzhihangff 2013-03-06
  • 打赏
  • 举报
回复
indexWriter.commit() 仔细看类里的方法。你会发现里面有提交和回滚方法。也就是说,你添加了索引但是并没提交。所以到达一定限度内存就挂了。
fengzhihangff 2013-03-06
  • 打赏
  • 举报
回复
你这问题应该是没有优化索引的问题。 如果你前一万条没问题的话 你就一万条优化一次索引。 我也遇到过你类似的问题。具体多少条优化一次看具体情况。
xcfdsarfew 2012-12-25
  • 打赏
  • 举报
回复
这个解决了吗?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧