在多个索引上搜索会得到错误的total_found结果(Sphinx 2.X)

时间:2014-02-06 10:56:17

标签: sphinx

我不确定,我是对还是错。

我有两个索引x_person,y_person。

如果我在x_person上查询

SELECT * FROM x_person WHERE is_active = 0 LIMIT 0,1;

mysql> show meta;
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| total         | 1000   |
| total_found   | 131541 |
| time          | 0.005  |
+---------------+--------+
3 rows in set (0.00 sec)

在y_person中查询:

SELECT * FROM y_person WHERE is_active = 0 LIMIT 0,1;Show meta;

mysql> show meta;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| total         | 1000  |
| total_found   | 34733 |
| time          | 0.002 |
+---------------+-------+
3 rows in set (0.00 sec)

假设我一起选择x_person和y_person索引,则total_match应为131541 + 34733 = 166274

SELECT * FROM x_person,y_person WHERE is_active = 0 LIMIT 0,1;


mysql> show meta;
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| total         | 1000   |
| total_found   | 165552 |
| time          | 0.008  |
+---------------+--------+
3 rows in set (0.00 sec)

这里我得到了total_found = 165552.任何人都可以解释为什么这不显示相同的'total_found'数字?

1 个答案:

答案 0 :(得分:1)

Sphinx会搜索这两个索引,并对结果进行“联合”处理。将它们加在一起。

131541 + 34733 = 166274. Which is roughly 165552 

略有差异可能是

  1. total_found通常是近似值。所以不要完全相加。

  2. 重复ID 。如果在每个索引中找到相同的doc_id,则只会在最终结果集中返回ONCE。 total_found将反映这种“重复数据删除”(但仅次于)

  3. 通过提升max_matches可以使它更接近近似,它足以包含整个结果集,这个数字将是精确的。