lucene对mongodb数据库建索引

实验室需要一个mongodb数据库的搜索引擎,经过几天的奋战,总算是写完了,这里就记录一下lucene对mongodb数据库建索引的经验吧。

我的方法是多线程+RAMDirectory

刚开始,我以为很简单,从服务器上取出了90000条数据到本地数据库,然后每从数据库取出一条数据便对其建索引,结果就这样很傻逼地一条一条地建了一个小时,而且只有10000条。请教了谷歌,发现lucene提供了RAMDirectory类库,可以先把索引建在RAM中,等超过缓存了再写到硬盘,这样可以大大提高速度,因为反复的读写硬盘是很慢很慢的操作。如果再结合多线程的话,想必速度又可以提升一大截。

在RAMDirectory建索引的方法:

RAMDirectory ramdir = new RAMDirectory();
        Analyzer analyzer = new IKAnalyzer();
        IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);

            IndexWriter ramwriter = new IndexWriter(ramdir,config);
            while (...){
                    
                Document document = new Document();                                    document.add(...);
                    ramwriter.addDocument(document);    
                if (ramwriter.ramSizeInBytes() > rambuffer)
                        ramwriter.commit();
                        IndexWriter.addIndexes(ramdir);//写入到硬盘
                        IndexWriter.commit();
                    
            ramwriter.close();

其中rambuffer我设置的是2M,对于多线程,我的方法是1W条数据一个线程,包括从数据库中取数据和建索引(RAM)两个过程,然后丢到线程池中运行。
下面是本人测试的速度:

rambuffer:2M

线程处理的数据个数:1W

cpu:2.1G双核

内存:2G

系统:Ubuntu 12.04

总数据量:9W

时间:40s左右

下面就是要到服务器测试大数据量啦。

转载于:https://www.cnblogs.com/flyingstone/p/3386992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值