我有四个节点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中。
请建议我是否需要进行任何配置更改以获得一致的计数。
答案 0 :(得分:1)
似乎问题与你如何查询分布式设置有关 - 你说"我的收藏有4个碎片,2个复制品和#34;跨越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
答案 1 :(得分:0)
我还没有找到这个问题的根本原因,但我暂时解决了这个错误
我一直在使用solrj4.x softcommit方法(UpdateRequest.setCommitWithin( commitWithinMs )
),我评论并在solr端使用了所有提交策略。
<autoCommit>
<maxTime>15000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>2000</maxTime>
</autoSoftCommit>
我从solr获得了一致的结果,但我仍然不确定为什么solrj客户端提交不起作用。