查询多个 solr 集合时分页不起作用
Pagination not working while querying multiple solr collecections
我有两个合集mdsearch_veevavault和mdsearch_hema
http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q=%3A&fl=id,desc1&wt=json&indent=true&collection=mdsearch_veevavault,mdsearch_hema&sort= titlesort%20desc,%20id%20asc
当我查询时没有给出开始和行数 returns:
{
"responseHeader":{
"status":0,
"QTime":5,
"params":{
"q":"*:*",
"indent":"true",
"fl":"id,desc1",
"collection":"mdsearch_veevavault,mdsearch_hema",
"sort":"titlesort desc, id asc",
"wt":"json"}},
"response":{"numFound":6963,"start":0,"docs":[
{
}
它给了我 6963 个结果,这是正确的
http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q=%3A&fl=id,desc1&wt=json&indent=true&collection=mdsearch_veevavault,mdsearch_hema&sort= titlesort%20desc,%20id%20asc&rows=25&start=300
-> 现在我将添加开始和行数条件开始 = 300 和行 = 25
{
"responseHeader":{
"status":0,
"QTime":22,
"params":{
"q":"*:*",
"indent":"true",
"fl":"id,desc1",
"start":"300",
"collection":"mdsearch_veevavault,mdsearch_hema",
"sort":"titlesort desc, id asc",
"rows":"25",
"wt":"json"}},
"response":{"numFound":6960,"start":300,"docs":[
{}
现在找到的记录数 减少了 到 6960
, 任何人都可以帮助我了解造成这种情况的原因吗?,
我假设当我们改变开始参数时 numFound 将保持不变,每次我改变开始参数时我都会看到这种变化
我猜这是因为两个集合中记录的 ID 重复。当 Solr 将它们合并为一个结果时,id 应该是唯一的——因为这就是 Solr 知道文档不同的方式。
发生这种情况的原因是 Solr 只有 returns 每个 shard/replica 足够的文档来满足请求的 start+rows 文档数,因此对于第一个请求,返回 10 个文档每个服务器,以及与查询匹配的文档总数。然后将这些计数与文档列表一起合并到响应请求的服务器上。
在这种情况下,Solr 不会知道在剩余的文档集中,有 n 个重叠的 id。但是,当您实际上已经分页到结果集中足够远时,Solr 将查看从分片返回的所有结果集中的那些 ID,并查看是否存在重复的 ID - 然后将这些 ID 从总数中删除。
您可以通过为每个 id 引入一个特定于集合的参数来解决这个问题(即 collectionname_idvalue
作为 id
中的实际值),除非您对合并这些结果感到满意。
我有两个合集mdsearch_veevavault和mdsearch_hema
http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q=%3A&fl=id,desc1&wt=json&indent=true&collection=mdsearch_veevavault,mdsearch_hema&sort= titlesort%20desc,%20id%20asc
当我查询时没有给出开始和行数 returns:
{
"responseHeader":{
"status":0,
"QTime":5,
"params":{
"q":"*:*",
"indent":"true",
"fl":"id,desc1",
"collection":"mdsearch_veevavault,mdsearch_hema",
"sort":"titlesort desc, id asc",
"wt":"json"}},
"response":{"numFound":6963,"start":0,"docs":[
{
}
http://rldata:8983/solr/mdsearch_veevavault_shard1_replica1/select?q=%3A&fl=id,desc1&wt=json&indent=true&collection=mdsearch_veevavault,mdsearch_hema&sort= titlesort%20desc,%20id%20asc&rows=25&start=300
-> 现在我将添加开始和行数条件开始 = 300 和行 = 25
{
"responseHeader":{
"status":0,
"QTime":22,
"params":{
"q":"*:*",
"indent":"true",
"fl":"id,desc1",
"start":"300",
"collection":"mdsearch_veevavault,mdsearch_hema",
"sort":"titlesort desc, id asc",
"rows":"25",
"wt":"json"}},
"response":{"numFound":6960,"start":300,"docs":[
{}
现在找到的记录数 减少了 到 6960 , 任何人都可以帮助我了解造成这种情况的原因吗?, 我假设当我们改变开始参数时 numFound 将保持不变,每次我改变开始参数时我都会看到这种变化
我猜这是因为两个集合中记录的 ID 重复。当 Solr 将它们合并为一个结果时,id 应该是唯一的——因为这就是 Solr 知道文档不同的方式。
发生这种情况的原因是 Solr 只有 returns 每个 shard/replica 足够的文档来满足请求的 start+rows 文档数,因此对于第一个请求,返回 10 个文档每个服务器,以及与查询匹配的文档总数。然后将这些计数与文档列表一起合并到响应请求的服务器上。
在这种情况下,Solr 不会知道在剩余的文档集中,有 n 个重叠的 id。但是,当您实际上已经分页到结果集中足够远时,Solr 将查看从分片返回的所有结果集中的那些 ID,并查看是否存在重复的 ID - 然后将这些 ID 从总数中删除。
您可以通过为每个 id 引入一个特定于集合的参数来解决这个问题(即 collectionname_idvalue
作为 id
中的实际值),除非您对合并这些结果感到满意。