Sphinx 与 MATCH 的不同结果

Sphinx different results with MATCH

所以,我遇到这样一种情况,我既不希望 MATCH 又不希望 MATCH 所有项目都得到相同的结果,但得到的结果却不一致。

这些是数据库中的当前类型:

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

如果我没有指定任何条件:

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

所有类型都匹配:

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

是我还是应该查询 return 相同的确切计数?

编辑:

经过一番挖掘,我发现我的 "types" 中有一个连字符。

所以像这样:

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

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

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

将是 "type1" 或 "type" AND "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'

有什么想法吗?

sphinx 的 WHERE 子句中没有 'OR'。

  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")') 将连字符(或多个单词)版本放在一起。