码迷,mamicode.com
首页 > 其他好文 > 详细

solr新建富文本索引慢

时间:2015-06-18 17:30:07      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

  一、solrj新建文档索引官方代码。新建一个request,为这个request添加文件,行为,参数,然后提交给solr服务器。

ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
up.addFile(new File("mailing_lists.pdf"));
up.setParam("literal.id", "mailing_lists.pdf");
up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
result = server.request(up);

二、最初采用单线程新建索引方式,发现新建60个文档需要30分钟,900个文档目测要一天(导致这个问题的原因后面再说)。所以编写了多线程建立索引的方式。结果时间确实大大减少了,900个文档需要40分钟。但是查阅官方资料发现,solr建索引的速度在每秒10-150个文档之间。所以这个速度还是太低。查看日志发现为文档建索引的时间是越来越长的。

三、根据日志估计是缓存的问题,修改solr.config文件中的缓存设置。新建900个文档的索引时间仅仅由40分钟提高到了30多分钟。所以不是缓存的问题。

四、继续查看日志,发现每次提交都导致openSearcher,和registered new search。以为是每次为文件建索引都要提交导致的。所以修改官方提供的代码。不设置Action。并且到最后才提交文档。细心的读者看到以下代码可能就会发现本菜鸟错在哪里了。代码如下:

ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
for(File file:files){
    up.addFile(new File("mailing_lists.pdf"));

    up.setParam("literal.id", "mailing_lists.pdf");

    //up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);//注释这行代码。
    server.request(up);// 
} 
server.commit();

五、发现修改新建索引速度还是不提高。于是各种折腾,看源码,重写源码。各种尝试4天左右。发现request的contentStream数量不对。调用up.getContentStreams().size()发现contentStream是递增的。好吧,终于找到原因了。我把ContentStreamUpdateRequest up声明在循环体外面,导致addfile每次往up里面添加file。最终文件越来越多,时间自然也就越来越慢了。(这个错误真的太低级了,之前看到说solrserver是重量级的,想当然以为up也是重量级的。放在循环体外可以优化性能)。

六、虽然犯了这个低级错误,但是最终还是了解了很多solr缓存,以及不用单个文件每次都调用commit的方法。还是不错了。最终代码如下:

ContentStreamUpdateRequest up;
for(File file:files){
    up=new ContentStreamUpdateRequest("/update/extract");
    up.addFile(new File("mailing_lists.pdf"));
    up.setParam("literal.id", "mailing_lists.pdf");
    //up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);//注释这行代码。
    server.request(up);//这里的server使用的是EmbeddedSolrServer。
} 
server.commit();


solr新建富文本索引慢

标签:

原文地址:http://my.oschina.net/u/1403753/blog/468439

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!