3

我想使用 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 个?

4

2 回答 2

3

这是Sphinx 的已知行为(CAVEAT EMPTOR 部分),请阅读此论坛主题

一种建议的解决方法可能是在您的配置中将其设置为天文数字的上限,并在使用 SetLimits 时动态降低它。

从论坛帖子中复制

$cl->SetLimits(($currentPage-1)*50, 50, max(1000,($currentPage*50)+100)) );

但是 Sphinx 背后的想法是,您应该在第一页上获得良好的查询结果,因此您不想阅读所有内容。

于 2012-07-25T10:55:39.637 回答
1

你使用什么排序顺序?

如果它定义了排序顺序,例如时间戳,甚至文档 ID,则可以重新定义“分页”以用作过滤器。因此不需要使用高偏移量。

正如您所指出的,高报价是邪恶的。实现它们的唯一方法是计算偏移量之前的所有文档,然后丢弃它们。例如,偏移量为 100000,意味着必须计算 100000 行然后丢弃。它几乎否定了能够使用索引。

于 2012-07-25T14:08:04.350 回答