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
;
因此,如果两条记录具有相同的相关性,则较短的将排在第一位。
我正在尝试在 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
;
因此,如果两条记录具有相同的相关性,则较短的将排在第一位。