我有一个简单的全文搜索查询:
SELECT *, MATCH(col1,col2,col3) AGAINST ('keywords' IN BOOLEAN MODE) AS relev FROM table1 ORDER BY relev DESC
从技术上讲这是可行的,但它也会返回相关性为0的结果。
我尝试使用:
SELECT *, MATCH(col1,col2,col3) AGAINST ('keywords' IN BOOLEAN MODE) AS relev FROM table1 WHERE relev > 0 ORDER BY relev DESC
但这告诉我
relev
是无效的列名。有什么方法可以排除
relev
为0的结果而不必在MATCH(..) AGAINST(..)
子句中再次使用WHERE
吗?这样做基本上不会再次重复全文搜索并花费两倍的时间吗? 最佳答案
您可以改用having
子句:
SELECT t.*,
MATCH(col1, col2, col3) AGAINST ('keywords' IN BOOLEAN MODE) AS relev
FROM table1 t
HAVING relev > 0
ORDER BY relev DESC;
SQL(通常)不允许在
WHERE
子句中使用列别名。但是,MySQL允许在HAVING
子句中使用它们(并非所有数据库都允许)。对于这种情况,这可能很方便。关于mysql - 在WHERE子句中使用FULLTEXT搜索的相关性得分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35830286/