我想使用Sphinx浏览大量数据(大约5000万行)。显然,将max_matches配置设置为10,000,它只允许我浏览多达10,000行。如果我增加限制,它会大大减慢我们的服务器,所以现在,max_matches的最佳数量是10,000。
我正在使用PHP API访问Sphinx,我需要使用它的函数,如SetFilterRange(),SetFilter(),SetSortMode()等。
现在每当我需要从Sphinx获取数据时,我就是这样做的:
// Some codes here to set filters
$sphinx->SetLimits( 100, 20 ); // Telling sphinx to return page 6
$results = $sphinx->query('');
这没关系,但是当我尝试浏览超过10,000时,它不会返回任何内容。有没有办法超过10,000忽略限制?
答案 0 :(得分:2)
这是known behavior of Sphinx(CAVEAT EMPTOR部分),请阅读this forum thread。
一个建议的解决方法可能是将其设置为配置中的天文大限制,并在使用SetLimits时动态降低它。
复制出论坛帖子:
$cl->SetLimits(($currentPage-1)*50, 50, max(1000,($currentPage*50)+100)) );
但是Sphinx背后的想法是你应该在第一页上获得你的查询的好结果,因此你不想阅读所有内容。
答案 1 :(得分:1)
您使用的是哪种订单?
如果它是一个已定义的排序顺序,如时间戳,甚至是文档ID,那么可以重新定义“分页”以用作过滤器。从而不需要使用高偏移量。
正如你所说,高报价是邪恶的。它们可以实现的唯一方法是在偏移之前计算出所有文档,然后丢弃它们。例如,偏移量为100000,表示必须计算100000行然后丢弃。 它几乎否定了能够使用索引。