lucene 做全文索引,增量索引问题!求解!

小雨转晴 2008-07-16 05:31:39
初学lucene,根据需求做检索检索。19W 的数据量。我在myeclipse下一次性都做索引,但是会【内容溢出】

修改jvm内存-Xmx1024m后,想使用增量索引的方式,一次索引1000条,但是第一次很快,第二次就超慢。甚至到死机的状态。

不知道如何解决!希望高手指教!

核心:【我的19W数据如何生成lucene库!!!】

希望可以给出实现。十分感激!

虚心请教!
...全文
1530 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaojiewang 2011-09-29
  • 打赏
  • 举报
回复
mark
小布丁 2011-04-19
  • 打赏
  • 举报
回复
取出适合内存大小记录集放下缓冲区,使用多线程将缓冲区大到最大值写入索引中!
ladybirds2008 2010-02-25
  • 打赏
  • 举报
回复
求Lucene结合Hibernate的配置实例 急。。
您若有Lucene的例子工程,帮忙发一个好吗?最好是可以分词。
Email: gao.guangpei@zte.com.cn 或者ggp123@126.com
非常感谢你!
http://topic.csdn.net/u/20100225/10/a849bece-50eb-4f59-b4d2-87aba2c2b7e4.html
没有高手吗?
com2exe 2010-02-09
  • 打赏
  • 举报
回复
嗯。。最近也遇到了。


内存溢出主要是查询加载到内存中时溢出

或者在写入索引的时候。

这样可以批量查询小数据量的SQL,用多线程跑比较好。

写入索引溢出就设置索引的块大小啊什么的。。

我现在写3w数据没问题,大数据量这样分下来也应该不会有问题,只是时间问题。。
ziwei_1986 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 nkannan 的回复:]
本想把我的代码贴上来的,还是太长了。
一次性读入全部数据,放到ArrayList中,然后再生成Lucene索引的代码在http://www.baizeju.com/html/Lucene/200807/21-155_3.html,大家自己看看吧。



[/Quote]
老大 你给的网站怎么都打不开啊! 我好像看看你的代码!
huihui0103 2008-10-28
  • 打赏
  • 举报
回复
mark
小雨转晴 2008-07-23
  • 打赏
  • 举报
回复
我的索引生成了,但是在做检索的时候,


【如果符合条件的数据过多,就会造成内存溢出】。

有没有什么办法,可以检索的时候,如果符合条件的数据大于1000条的时候,首次就返回1000条,我的页面是每天10条,
也就是100页,当点击100页的时候再显示后面的下1000条呢(也就是这是再做二次检索)?这时释放前面占用的内存,
重新放入第二个1000条...

lucene有没有这样的功能呢?

不知道我描述清楚没有,不清楚什么大家下面放个脚印,我马上解释!

高手指教!!!
小雨转晴 2008-07-22
  • 打赏
  • 举报
回复
自己顶!
nKannan 2008-07-21
  • 打赏
  • 举报
回复
又增加了一点,在Lucene每索引1000条记录后,输出一下内存使用情况,可以看到Lucene运行中,空闲内存一直在310M到370M之间,说明Lucene对于内存的使用一直比较稳定。
但是注意一下每1000跳记录使用的时间,可以发现,开始的时候速度比较快,每1000条基本在0.1到0.2秒之间。
在70000,120000,181000,215000,266000,309000,348000,382000,414000处发生了几次耗时比较长的处理,应该是Lucene在合并磁盘文件。
而且随着数据量的加大,每1000天记录的处理时间最后到了1秒左右。

程序的输出信息太长了,CSDN不让贴。大家可以到我的网站www.baizeju.com看到实际的测试记录(广告,哈哈)
nKannan 2008-07-21
  • 打赏
  • 举报
回复
我重新测试了一下我的数据:
共有数据项499945个,数据结构
class JobRecord {
public String szJobID;
public String szJobTitle;
public String szJobDesc;
}
统计数据长度(多数为中文,GBK编码):
JobID是纯数字,长度在8-11位之间。
JobTitle是GBK编码,多数为中文,也有纯英文的。平均长度在7.8(汉字算一个)。
JobDesc是GBK编码,多数为中文,也有纯英文的。平均长度在179.1(汉字算一个)。

一次性先从数据库查出全部记录到ResultSet,
读入前时间和内存使用:20080721 10:57:24.968 -->>Total Memory: 532742144 Free Memory: 500238488 Maximum Memory: 1456734208
读入后时间和内存使用:20080721 10:57:38.765 -->>Total Memory: 532742144 Free Memory: 284768328 Maximum Memory: 1456734208

将ResultSet中的数据全部读入到ArrayList中:
生成ArrayList后时间和内存使用:20080721 10:57:43.109 -->>Total Memory: 909459456 Free Memory: 383773336 Maximum Memory: 1456734208

建立Lucene索引:
20080721 11:01:00.765 -->>Total Memory: 909459456 Free Memory: 328840680 Maximum Memory: 1456734208

建立的索引文件大小:
Directory of E:\Baizeju\Index

07/21/2008 11:05 AM <DIR> .
07/21/2008 11:05 AM <DIR> ..
07/21/2008 11:05 AM 0 result.txt
07/21/2008 11:01 AM 20 segments.gen
07/21/2008 11:01 AM 95 segments_r
07/21/2008 11:00 AM 270,839,025 _a.cfs
07/21/2008 11:00 AM 29,821,400 _b.cfs
07/21/2008 11:01 AM 24,783,663 _c.cfs
6 File(s) 325,444,203 bytes
2 Dir(s) 8,344,842,240 bytes free

从此可见,读DB数据(DB的ResultSet对象)和保存数据在内存是消耗内存最多的操作,Lucene做索引耗时大(不过49W数据用了3分钟不到,比我预想得快多了),但是耗内存不是很大。
john_yong 2008-07-21
  • 打赏
  • 举报
回复
10w就卡了?我这都建过70w的数据都没卡啊!就是那样的呀!每两千条写到内存的索引中去,然后在磁盘上建个索引,writer.addindex方法之类的,将索引增加进去啊!
小雨转晴 2008-07-21
  • 打赏
  • 举报
回复
你要学多久?
nKannan 2008-07-21
  • 打赏
  • 举报
回复
本想把我的代码贴上来的,还是太长了。
一次性读入全部数据,放到ArrayList中,然后再生成Lucene索引的代码在http://www.baizeju.com/html/Lucene/200807/21-155_3.html,大家自己看看吧。


maodie007 2008-07-20
  • 打赏
  • 举报
回复
我先学 , 等我
小雨转晴 2008-07-20
  • 打赏
  • 举报
回复
抱歉 是机器超卡
小雨转晴 2008-07-20
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 l_wenb 的回复:]
引用 36 楼 java2000_net 的回复:
增量索引,我这里是每次有新的数据,比如发言,回复等,马上增加索引的。

就是那个创建索引时不要使用重新创建就行了。


尊敬
[/Quote]

这个我明白。只是因为我现在单条数据的数据量较大,所以在做增量的是超慢,机器插卡,现在生成10W数据的索引了,还有10W,怎么增量进去,这个是核心!谢谢各位!
l_wenb 2008-07-19
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 java2000_net 的回复:]
增量索引,我这里是每次有新的数据,比如发言,回复等,马上增加索引的。

就是那个创建索引时不要使用重新创建就行了。
[/Quote]

尊敬
l_wenb 2008-07-19
  • 打赏
  • 举报
回复
我帮你顶
老紫竹 2008-07-18
  • 打赏
  • 举报
回复
writer.addDocument(doc);
writer.flush(); // 加上这一句,把索引从内存写到磁盘
reality 2008-07-18
  • 打赏
  • 举报
回复
我也遇到过这样的问题,5万的数据,一次提交2000条就会溢出。解决的办法就是减少提交的次数。
做几次测试,看看减少到多少条不会出错。 然后循环分次提交。可能时间会长一些。
增量的话,使用定时器,找到数据变化量,再写入。
加载更多回复(38)

67,515

社区成员

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

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