相关性以布尔模式排序的MySQL全文搜索

时间:2019-12-04 00:49:50

标签: mysql boolean relevance

我试图在MySql中以布尔模式构建全文本搜索。

首先,我尝试了此操作,因为我读到如果您使用WHERE,它将自动根据相关性返回结果:

SELECT DISTINCT word1, lang1, lang2, row_type FROM translations WHERE MATCH (word1) AGAINST ('$search' IN BOOLEAN MODE)

因此,按相关性排序不会发生。 然后我尝试了以下方法:

$sql = "SELECT *, MATCH(word1) AGAINST ('$search' IN BOOLEAN MODE) AS relevance FROM `translations` WHERE MATCH(word1) AGAINST ('$search' IN BOOLEAN MODE) ORDER BY relevance DESC";

这只是根据匹配的单词数对匹配进行排序,然后按ID号列出它们。除了匹配的单词数以外,没有任何相关性搜索。

例如,如果我搜索“红色汽车”一词,它将返回:

1. red car is nice
2. red car
3. the car has a very nice color
4. car

我希望“汽车”一词在“汽车具有非常好的颜色”之前出现

使用BOOLEAN MODE时的相关数字是表示匹配单词数的整数。

当我使用NATURAL LANGUAGE MODE时,相关数字是精确的十进制数字,并且相关搜索工作正常。

如何在BOOLEAN MODE中获得真正相关的结果列表?

2 个答案:

答案 0 :(得分:2)

首先,您希望期望按相关性排序。 您期望所有信息 你可以试试看吗 SELECT * FROM TEST_BOOLEAN WHERE ID_1;

答案 1 :(得分:1)

您的MySQL版本是什么?

我确实记得在布尔模式下没有任何关联。这只是TRUE / FALSE(1/0)。我以前在WHERE子句中使用布尔模式,而在SELECT / ORDER子句中使用自然语言模式。

您也可以尝试执行以下操作:

SET @search = 'red car';

SELECT
      *
    , MATCH(word1) AGAINST (@search IN BOOLEAN MODE) AS relevance
FROM
    translations
WHERE
    MATCH(word1) AGAINST (@search IN BOOLEAN MODE)
ORDER BY
      relevance DESC
    , LENGTH(word1) ASC
;

因此,如果两个记录具有相同的相关性,则较短的记录将是第一个。