Sphinx与MATCH的结果不同

时间:2015-01-06 15:38:21

标签: sphinx sphinxql

所以,我有一种情况,我想要没有MATCH和MATCH所有项目都能得到相同的结果,但结果却不尽相同。

这些是DB中的当前类型:

mysql> select the_type from data GROUP BY the_type;
+-----------------+
| the_type        |
+-----------------+
| type1           |
| type2           |
+-----------------+

如果我没有指定任何标准:

mysql> select COUNT(*) as num from data;
+------+
| num  |
+------+
| 2131 |
+------+

使用所有类型的MATCH:

mysql> select COUNT(*) as num from data WHERE MATCH('(@the_type type1|type2)');
+------+
| num  |
+------+
|  430 |
+------+

是我还是两个查询都返回相同的确切数?

编辑:

经过一番挖掘,我发现我的一个“类型”中有连字符。

类似于:

MATCH('(@the_type type1|type2)')

将导致“type1”或“type2”,但类似于:

MATCH('(@the_type type1|type-two)')

将是“type1”或“type”和“two”。

现在我尝试将类型转换为INT字段并尝试执行:

mysql> select COUNT(*) as num from data WHERE type = 1 OR type = 2;

但是我收到了错误:

ERROR 1064 (42000): sphinxql: syntax error, unexpected OR, expecting $end near 'OR type = 2'

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有' OR'在sphinx' es WHERE子句中。

  1. 但可以WHERE type IN (1,2);

  2. 如果真的想使用OR,可以把它放在SELECT部分​​,(另见IF函数)

    select COUNT(*) as num, (type = 1 OR type = 2) AS filter from data WHERE filter =1;
    
  3. 也可以尝试MATCH('(@the_type type1|"type-two")')将连字符(或多个单词)版本保持在一起。