用好Collection对solrj入库进行优化

用好Collection对solrj入库进行优化

今天一个朋友找我说他进行入库测试:

1个collection 2个shard,30多个字段,一个小时才入库4万条左右。

如果每条记录都很大这也是有可能的,不过我还是先让他贴代码出来看一下,他的入库代码:

public static void addIndex(String record) throws SolrServerException,

IOException {

String[] records = record.split(“\\|\\+\\|”, -1);

 

SolrInputDocument doc = new SolrInputDocument();

doc.addField(“id”, uuid(), 1.0f);

doc.addField(“DATA0″, records[0], 1.0f);1.0f);

.

.

.

doc.addField(“DATA31″, records[31], 1.0f);

 

Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();

docs.add(doc);

server.add(docs);

server.commit();

 

}

 

这样一条一条提交显然会慢的,除非要保证较强的事务性或者实时性,我建议他进行批量入,类似这样:

Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();

 

for (j = 0; j < 100000; j++) {

SolrInputDocument doc = new SolrInputDocument();

doc.setField(“id”, “i_” + i + 1 + “_j_” + j + 1 + “_”

+ ((i + 1) * (j + 1)));

doc.setField(“type”, j % 7);

doc.setField(“name”, “name” + System.currentTimeMillis());

docs.add(doc);

}

server.add(docs);

server.commit();

 

另外一点,如果我们能够控制好输入的速度,可以考虑autocommit,比如在solrconfig.xml里面配置:

<autoCommit>
<maxTime>15000</maxTime>
<maxDocs>10000</maxDocs>
<openSearcher>true</openSearcher>
</autoCommit>

上面配置的意思是:

maxTime:每15000ms,自动进行一次commit

maxDocs:若超过10000个文档更新,自动进行一次commit

openSearcher:执行完commit后记录马上可以搜索到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值