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

MySQL full text search in boolean mode order by relevance

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

首先我尝试了这个,因为我读到如果你使用 WHERE 它会自动 return 相关的结果:

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 号列出它们。没有超出匹配词数的相关性搜索。

例如,如果我搜索词条 "red car",它会 return:

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

我希望表达式 "car" 在 "the car has a very nice color"

之前出现

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

当我使用自然语言模式时,相关数字是精确的十进制数字,相关搜索工作正常。

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

起初您希望按相关性排序。 你期待所有的信息 你能试试吗 SELECT * 从 TEST_BOOLEAN 哪里 ID_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
;

因此,如果两条记录具有相同的相关性,则较短的将排在第一位。