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'。
但是可以做到WHERE type IN (1,2);
如果真的要用OR,可以放在SELECT部分,(另见IF函数)
select COUNT(*) as num, (type = 1 OR type = 2) AS filter from data WHERE filter =1;
也可以尝试 MATCH('(@the_type type1|"type-two")')
将连字符(或多个单词)版本放在一起。
所以,我遇到这样一种情况,我既不希望 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'。
但是可以做到
WHERE type IN (1,2);
如果真的要用OR,可以放在SELECT部分,(另见IF函数)
select COUNT(*) as num, (type = 1 OR type = 2) AS filter from data WHERE filter =1;
也可以尝试
MATCH('(@the_type type1|"type-two")')
将连字符(或多个单词)版本放在一起。