cloudsolrclient commit 索引数量少于实际值

发布于 2022-09-11 16:32:41 字数 1842 浏览 27 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暗藏城府 2022-09-18 16:32:41

找到原因了,确实是索引时有重复的主键。

通关观察统计选项,发现Deleted Docs的数量刚好是缺少的数量,问题定位到webservice接口返回的数据,最后发现是oracle分页时,sql语句中有按时间排序的条件,由于存在相同时间的数据,因此每页数据都不固定,导致第一页和第二页可能存在相同数据。

最后的解决办法是按id排序,避免分页数据重复。
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文