【问题标题】:Solr inconsistent result countSolr 不一致的结果计数
【发布时间】:2015-10-09 01:42:14
【问题描述】:

我有四个节点 solrcloud setup version 4.10,我的集合有 4 个分片,2 个副本。我的应用程序提供实时数据摄取的搜索能力,数据摄取和搜索过程并行运行。

每天的数据加载量约为 2~3MM 记录(插入/更新操作),总文档数为 80MM+。

我们面临的问题是 solr 在数据摄取高峰期返回的记录数非常不一致。

示例查询:

for i in `seq 1 50`;
do
       curl 'http://localhost:8888/solr/OPTUM/select?q=*:*&wt=json&indent=true'|grep numFound|rev|cut -d'{' -f1 |rev
done

numfound 变量的响应显示有时文档数比实际存在于 solr 中的文档数少得多。

请建议我是否需要进行任何配置更改以获得一致的计数。

【问题讨论】:

  • 这种不一致的numFound 是否也反映在搜索结果的不一致中?你在使用 autoCommit 和 autoSoftCommit 配置吗?
  • 是的,搜索结果中的 numfound 也是不一致的。我在帖子中添加了提交配置。30000false
  • 不确定这是否适用于云,但管理员调用是否返回正确的结果? localhost:8888/solr/admin/cores?action=STATUS
  • 不,即使是 UI 也不会返回正确的结果。

标签: solr lucene


【解决方案1】:

似乎问题与您查询分布式设置的方式有关——您说“我的集合有 4 个分片,2 个副本”跨 4 个节点...您的不一致结果可能是由于您被重定向到基于负载平衡算法——因此每次使用不同的分片并返回给您不同的(子集)结果集。

阅读Distributed Requests documentation here。

尝试添加类似的内容:

http://localhost:8983/solr/gettingstarted/select?q=*:*&shards=nodehost1:7574/solr,nodehost2:8983/solr,nodehost3:8983/solr,nodehost4:8983/solr

【讨论】:

  • 我发布的有问题的查询 url 是我用于测试的,实际上我的应用程序使用 solrj 并且连接是通过 zookeeper 节点发生的,我无法向 solrj 提供分片详细信息。我试图添加碎片来测试 url,但它不起作用。
  • 问题出在 solrj softcommit 导致结果不一致,我已经发布了对我有用的解决方案,感谢您的帮助
【解决方案2】:

我还没有找到这个问题的根本原因,但我暂时做了一些工作来解决这个错误。
我一直在使用 solrj4.x 软提交方法(UpdateRequest.setCommitWithin( commitWithinMs )),我在 solr 结束时评论并使用了所有提交策略。

    <autoCommit>
            <maxTime>15000</maxTime>
            <openSearcher>false</openSearcher>
        </autoCommit>
<autoSoftCommit>
            <maxTime>2000</maxTime>
        </autoSoftCommit>

我从 solr 获得了一致的结果,但我仍然不确定为什么 solrj 客户端提交不起作用。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多