Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对多个索引的搜索给出了错误的总搜索结果(Sphinx 2.X)_Sphinx - Fatal编程技术网

对多个索引的搜索给出了错误的总搜索结果(Sphinx 2.X)

对多个索引的搜索给出了错误的总搜索结果(Sphinx 2.X),sphinx,Sphinx,我不确定,我是对还是错 我有两个索引x_person,y_person 如果我询问x_人 SELECT * FROM x_person WHERE is_active = 0 LIMIT 0,1; mysql> show meta; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | total | 1000 | | total_found | 131

我不确定,我是对还是错

我有两个索引x_person,y_person

如果我询问x_人

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索引,则总匹配应为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)

这里我得到了找到的总数=165552。有人能解释为什么这不显示相同的“找到的总数”数字吗?

Sphinx搜索这两个索引,并将结果进行“并集”。把它们加在一起

131541 + 34733 = 166274. Which is roughly 165552 
细微的差别可以归结为

  • 找到的总\u通常是一个近似值。因此,这并不完全符合逻辑

  • 重复ID。如果在每个索引中找到相同的doc_id,则在最终结果集中只返回一次。找到的总_将反映这种“重复数据消除”(但同样仅大致如此)


  • 通过提高
    max_matches
    ,如果它足够大,可以包含整个结果集,那么数字将是精确的

    @MoyedAnsari,其Sphinx查询及其与MySql无关。我标记此问题是针对Sphinx的。该查询找到的总行数可能为131541*34733(即,两个表中所有可能的行组合),但该sql可能无效,因为两个表似乎都有一个名为is_active的列,并且您没有指定要引用的列。我指的是上一个结果,在上一个结果中,我同时选择了索引(x_person和y_person)。所以我假设“找到的总数量”应该是第一个和第二个“找到的总数量”的总和@KickstartUmm Kickstart,这是一个SphinxQL查询,而不是Mysql。Sphinx的逗号连接实际上是一个并集,而不是像常规SQL中那样的交叉连接。所以两者的总和基本上是分开的总和-即131541+34733~=165552(只是因为找到的总和通常是一个近似值,而不是一个精确的数字)啊,对不起。只是刚刚意识到它被用来包含mysql标签,因此很混乱!我正在查询x_person和y_person,它有相同的文档id:)谢谢@barryhunter。测试记录少于1000条,以避免出现“最大匹配”问题。非常感谢您的支持。如果您觉得这对其他人有用,请单击“向上”获取问题。我想很多人都有同样的问题。