cloudsolrclient commit 索引数量少于实际值
solrj创建索引,每次大概129776条数据,用多线程创建,每个线程最多处理1w条数据。每个线程核心代码如下。
可实际创建索引完成后只有97878条索引(每次执行,实际索引数量都不一样),看了日志没有报错。索引库主键是数据库的主键,不会重复。
String ip = PropertiesInit.getPropertiesValue("solrCluster.ip");
CloudSolrClient solrServer = new CloudSolrServer(ip);
// 第三步:需要设置DefaultCollection属性。
solrServer.setDefaultCollection(coreName);
// 第四步:创建一SolrInputDocument对象。
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
// 第五步:向文档对象中添加域
for (int i = 0; i < list.size(); i++) {
newSum++;
//一些逻辑代码
docs.add(document);
}
// 第六步:把文档对象写入索引库。
solrServer.add(docs);
// 第七步:提交。
UpdateResponse response = solrServer.commit();
System.out.println("本次提交索引数量: "+newSum+"。响应:" + response.getResponse());
solrServer.close();
打印出来的日志
实际索引数量
配置文件
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
</autoSoftCommit>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到原因了,确实是索引时有重复的主键。
通关观察统计选项,发现Deleted Docs的数量刚好是缺少的数量,问题定位到webservice接口返回的数据,最后发现是oracle分页时,sql语句中有按时间排序的条件,由于存在相同时间的数据,因此每页数据都不固定,导致第一页和第二页可能存在相同数据。
最后的解决办法是按id排序,避免分页数据重复。