首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Lucene 出现内在溢出的异常

2012-02-09 
Lucene 出现内在溢出的错误public class CreateIndexImpl implements CreateIndexServiceprivate File are

Lucene 出现内在溢出的错误
public class CreateIndexImpl implements CreateIndexService
  private File areaDir = new File("E:\\index\\areaIndex");

private File objDir= new File("E:\\index\\objIndex");

private File entDir = new File("E:\\index\\entIndex");
   
  private Analyzer analyzer;

private IndexWriter indexWriter = null;

private GetObjectDao objDao;

public GetObjectDao getObjDao() {
return objDao;
}

public void setObjDao(GetObjectDao objDao) {
this.objDao = objDao;
}

public CreateIndexImpl() {
analyzer = new MMAnalyzer();

}

  public void createIndex(boolean flag) {

createAreaIndex(flag);

createObjIndex(flag);

createHomeIndex(flag);

analyzer = null;
}

  public void createAreaIndex(boolean flag) {
long startTime = new Date().getTime(); // 创建索引开始时间
long endTime = 0; // 创建索引结束时间
try {
indexWriter = new IndexWriter(areaDir, analyzer, flag);

List<Area> areaList = objDao.getArea();
int i = 0;
for (Area area : areaList) {
Document document = new Document();
Field areaid = new Field("AreaId", area.getId().toString(),
Field.Store.YES, Field.Index.UN_TOKENIZED);
Field areaName = new Field("AreaName", area.getName(), Field.Store.YES,
Field.Index.TOKENIZED, Field.TermVector.WITH_POSITIONS_OFFSETS);
area = null;
String str = "isValue"; 

Field ID = new Field("ID", str, Field.Store.YES,
Field.Index.UN_TOKENIZED);
document.add(areaid);areaid = null;
document.add(areaName);areaName = null;
document.add(ID);ID = null;
indexWriter.addDocument(document);

document = null;
}
areaList = null;

try {
indexWriter.setUseCompoundFile(true);
indexWriter.optimize();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
indexWriter.close();
indexWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}

} catch (IOException e1) {
e1.printStackTrace();
}
}

public void createObjIndex(boolean flag) {
try {
indexWriter = new IndexWriter(objDir, analyzer, flag);

List<ObjStatus> objList = objDao.getObjInfo();

for (ObjStatus obj: userList) {
Document document = new Document();
Field fieldObjId = new Field("UID", obj.getId().toString(),
Field.Store.YES, Field.Index.UN_TOKENIZED);
Field fieldObjName = new Field("ObjName", obj.getSur()
+ obj.getName(), Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fieldObjStat = new Field("ObjStat", obj.getStat(),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS); 
Field fieldObjPhotoPath = new Field("ObjPhotoPath", obj
.getPhotoPath(), Field.Store.YES, Field.Index.UN_TOKENIZED); 


obj= null;

document.add(fieldObjId);fieldObjId = null;
document.add(fieldObjName);fieldObjName = null;
document.add(fieldObjStat);fieldObjStat = null;
document.add(fieldObjPhotoPath);fieldObjPhotoPath = null;

indexWriter.addDocument(document);
document = null;
}
userList = null;
try {
indexWriter.setUseCompoundFile(true);
indexWriter.optimize();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {


indexWriter.close();
indexWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
}

public void createEntIndex(boolean flag) {
try {
indexWriter = new IndexWriter(entDir, analyzer, flag);

List<Ent> entList = objDao.getEntInfo();

int i = 0;
for (Ent ent: entList) {
Document document = new Document();
Field fieldEntId = new Field("HID", ent.getId().toString(),
Field.Store.YES, Field.Index.TOKENIZED);
Field fieldEntStat = new Field("EntStat", ent.getStat(),
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
Field fieldEntExceplain = new Field("EntExceplain",
ent.getExplain(), Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);

ent = null;

document.add(fieldEntId);fieldEntId = null;
document.add(fieldEntStat);fieldEntStat = null;
document.add(fieldEntExceplain);fieldEntExceplain = null;

indexWriter.addDocument(document);
System.out.println("i -------------------------------> " + i);
i += 1;
document = null;
}

entList = null;

try {
indexWriter.setUseCompoundFile(true);
indexWriter.optimize();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
indexWriter.close();
indexWriter = null;
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
}

}

硬件配置:
 Inter(R) Pentium (R) Dual E2160 @ 1.80GHz 的 CPU
 2G 的 DDR2 内存
 
 TomCat5.5启动时设置的 Initial memory pool: 512MB; Maximum memory pool: 1024MB(之前是1G的内存,TomCat启动初始化128MB,最大256MB,内存溢出后又加了一根内存条),CPU占用率为55% - 60%之间,内存占用率在1G左右(开了MQSQL,MyEclipse,FrieFox).
 
 如果单单对 areaList 中的数据建立索引,没什么问题。

areaList 中有 40447 条数据, objList 中有大约 60 条数据, entList 中有大约 30 条数据,
系统启动时先对 areaList 中的数据创建 索引,再对 objList 中的数据创建,后对 entList 中的数据创建索引。
但是对 objList , entList 中的数据创建索引完成之后,到 createAreaIndex(boolean flag) 中 处理72条后 就停下抛出异常:
2008-11-13 19:55:24,562 [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project]]-[ERROR] StandardWrapper.Throwable
java.lang.OutOfMemoryError: Java heap space
2008-11-13 19:55:24,578 [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project]]-[ERROR] Servlet /project threw load() exception
java.lang.OutOfMemoryError: Java heap space
2008-11-13 19:55:26,875 [org.apache.struts.validator.ValidatorPlugIn]-[INFO] Loading validation rules file from '/WEB-INF/validator-rules.xml'
2008-11-13 19:55:27 org.apache.coyote.http11.Http11BaseProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2008-11-13 19:55:27 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2008-11-13 19:55:27 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/47 config=null
2008-11-13 19:55:27 org.apache.catalina.storeconfig.StoreLoader load
信息: Find registry server-registry.xml at classpath resource
2008-11-13 19:55:27 org.apache.catalina.startup.Catalina start
信息: Server startup in 49641 ms

已经两天了,我实在是没办法了,还请各位朋友帮帮忙!



[解决办法]
贴到lucene apache的maillist比这好吧

热点排行
Bad Request.