我有一个简单的全文搜索查询:

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/

10-10 19:26