gpt4 book ai didi

MySQL全文搜索以 boolean 模式顺序按相关性排序

转载 作者:行者123 更新时间:2023-12-04 10:56:15 26 4
gpt4 key购买 nike

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

首先,我在阅读时尝试了这个,如果您使用 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 号列出它们。除了匹配的单词数之外,没有相关性搜索。

例如,如果我搜索“red car”这个词,它会返回:
1. red car is nice
2. red car
3. the car has a very nice color
4. car

我希望在“汽车的颜色非常漂亮”之前出现“汽车”这个表达

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

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

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

最佳答案

你的 MySQL 版本是多少?

我记得它在 boolean 模式中没有任何相关性。这只是 TRUE/FALSE (1/0)。我曾经在 WHERE 子句中使用 boolean 模式,在 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全文搜索以 boolean 模式顺序按相关性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59167473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com