Lucene 3.4 索引速度为什么没有2.3快

PRINTLNER 2011-11-10 09:44:19
如题,建立索引时感觉3.4比2.3慢了好多,然后写了一段简单的代码试了一下。2.3需要641ms,而3.4却用了1563ms,不可思议啊,按理说3.4比2.3快好多才对吧..不知道问题出哪儿了,求解答~~

//2.3的代码
public static void main(String args[]) throws Exception{
long a=System.currentTimeMillis();
IndexWriter writer=new IndexWriter("index", new KeywordAnalyzer(),true);
writer.setMergeFactor(1024);
Document doc=null;
for(int i=0;i<50000;i++){
doc=new Document();
doc.add(new Field("id","wo"+i,Field.Store.YES,Field.Index.TOKENIZED));
doc.add(new Field("lon","123.1111",Field.Store.YES,Field.Index.TOKENIZED));
writer.addDocument(doc);
}
writer.optimize();
writer.close();
long b=System.currentTimeMillis();
System.out.println("time:"+(b-a)+"ms");
}




//3.4代码
public static void main(String args[]) throws Exception{
long a=System.currentTimeMillis();
Directory dir=FSDirectory.open(new File("index"));
IndexWriterConfig conf=new IndexWriterConfig(Version.LUCENE_34, new KeywordAnalyzer());
conf.setOpenMode(OpenMode.CREATE);
LogByteSizeMergePolicy mp=new LogByteSizeMergePolicy();
mp.setMergeFactor(1024);
conf.setMergePolicy(mp);
IndexWriter writer=new IndexWriter(dir, conf);
Document doc=null;
for(int i=0;i<50000;i++){
doc=new Document();
doc.add(new Field("id","wo"+i,Field.Store.YES,Field.Index.ANALYZED));
doc.add(new NumericField("lon",Field.Store.YES, true).setDoubleValue(123.1111));
writer.addDocument(doc);
}
writer.optimize();
writer.close();
long b=System.currentTimeMillis();
System.out.println("time:"+(b-a)+"ms");
}
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
PRINTLNER 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yaogang_xidian 的回复:]

Lucene3为了更加方便和有针对性,把对IndexWriter配置操作,单独放置到IndexWriterConfig类中来完成,这是一个的独立的类,把原Lucene2中通过构造函数来实现配置的操作,独立出来,单独设置了一个类即IndexWriterConfig来实现。从实际开发角度来讲,是方便了程序的开发,并且代码的组织会更加明晰和合理。
当然,代价就是需要额外的时间。
这和定义了许多类,……
[/Quote]
这个,貌似不是这个原因吧,当数据量大的时候速度会更慢,按你的解释说不通的,不过还是谢谢
yaogang_xidian 2011-11-11
  • 打赏
  • 举报
回复
Lucene3为了更加方便和有针对性,把对IndexWriter配置操作,单独放置到IndexWriterConfig类中来完成,这是一个的独立的类,把原Lucene2中通过构造函数来实现配置的操作,独立出来,单独设置了一个类即IndexWriterConfig来实现。从实际开发角度来讲,是方便了程序的开发,并且代码的组织会更加明晰和合理。
当然,代价就是需要额外的时间。
这和定义了许多类,这些类存放在不同的包下,和我把所有的操作放在同一个包中的同一个类中来完成是一样的。定义在不同的包中,显然便于维护,代码的组织也比较合理,可读性比较高(尤其代码达到几千、几万行的时候),但从编译到执行所需要的时间肯定要比单个类中定义执行所花费的时间要长。
PRINTLNER 2011-11-10
  • 打赏
  • 举报
回复
怎么没人呢....

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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