浏览Sphinx结果忽略max_matches?

时间:2012-07-25 09:53:40

标签: php mysql sphinx

我想使用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忽略限制?

2 个答案:

答案 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行然后丢弃。 它几乎否定了能够使用索引。

相关问题