如何按相关性对 MYSQL 全文搜索结果进行排序

2022-08-30 17:24:17

我对MYSQL相对较新,并且遇到了一个困扰我一段时间的问题。我尝试过到处搜索答案,但到目前为止还无法找到可接受的解决方案。

以下是我当前正在运行的查询,用于查找给定搜索词的最佳匹配项:

$query="SELECT * from `vocabulary` WHERE translation = 'word' OR translation LIKE '%word%'";

它返回的结果是全面的,因为它们包括所有相关行。但是,它们没有按任何特定顺序排序,我希望在PHP中打印结果时首先显示完全匹配的那些。喜欢这个:


1 |字<完全匹配
2 |填字游戏 < - 部分匹配按字母顺序排序 /
3 |字
数 4 |词匠


非常感谢您的帮助。

-macspacejunkie


答案 1

LIKE 不是全文搜索。在全文搜索中,返回一个匹配的分数,该分数可以大致近似为相关性。MATCH(...) AGAINST(...)


答案 2

您可以通过创建全文索引,然后与搜索词进行匹配来获得良好的相关性搜索。

所以像这样的东西应该有效。

ALTER TABLE `vocabulary` ADD FULLTEXT INDEX `SEARCH`(`translation`);

SELECT *, MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE) AS relevance 
FROM `vocabulary`
WHERE MATCH(translation) AGAINST ('+word' IN BOOLEAN MODE)
ORDER BY relevance DESC

有关更多信息,请参阅MySQL参考手册


推荐