我试图在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中获得真正相关的结果列表?
答案 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
;
因此,如果两个记录具有相同的相关性,则较短的记录将是第一个。