【发布时间】:2019-01-04 09:22:30
【问题描述】:
版本 Solr 7.4.0 zookeeper 3.4.11 结构 两个盒子 Machine-1,Machine-2 持有 solr 的单个实例
我们有一个单一分片和单一副本的集合,即 s=1 和 rf=1
几天前我们尝试向它添加副本。但是相同查询的分数来自不同的副本。
"response":{"numFound":5836,"start":0,"maxScore":4.418847,"docs":[
而在另一台机器上(副本)
"response":{"numFound":5836,"start":0,"maxScore":4.4952264,"docs":[
maxScore 不同。
由于分片,相关性受到影响,但由于相同的文档被复制到其他节点,因此预计不会复制。分数解释给出了 docCount 和 docFreq 不均匀的问题。
idf,计算为 log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) 来自: 1.050635000 文档计数:10020.000000000 docFreq :3504.0000000
idf,计算为 log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) 来自: 1.068795100
文档计数:10291.000000000 docFreq :3534.0000000
更新:在不同的集合上尝试相同。两个实例给出相同的分数。似乎是特定集合的问题。
我们怎样才能纠正原来的集合。
【问题讨论】:
-
初步猜测 - 两个副本上已删除文档的数量不同(它们仍然会影响分数,直到它们被删除)。它们的合并因子可能不同,或者在索引时无法将文档提交到其中一个副本 - 并且取决于提交文档时的设置 - 这可能不会作为致命错误传播。删除副本并再次添加它应该会再次强制复制完整的索引。向所有副本发出 fetch all 查询,查看文档数是否不同(因为 docCount 不同)
-
machine-1:8983/solr/MyTestCollection/select?q=*:*&rows=0 machine-2:8983/solr/MyTestCollection/select?q=*:*&rows=0 machine-1:8983/solr/MyTestCollection/select?q=*:*&shards=machine-2:8983/solr/MyTestCollection 全部提供相同数量的文档。我们可以删除副本,但应该删除哪个副本。我们如何知道哪个节点给出了正确的分数。
-
"shards"下的集合状态:{"shard1":{"range":"80000000-7fffffff","state":"active","replicas":{"core_node2":{" core":"MyTestCollection_shard1_replica_n1","base_url":"machine-1.com:8983/…", "type":"NRT","force_set_state":"false","leader":"true"},"core_node4":{"core" :"MyTestCollection_shard1_replica_n3","base_url":"machine-2:8983/…", "force_set_state":"false"}}}},