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

我对MYSQL比较陌生,并且遇到了一段时间以来一直困扰我的问题。 我已经试过Google的搜索结果,但仍然无法找到可接受的解决方案。

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

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

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


1 | 单词< - 完全匹配
2 | 填字游戏< - 部分匹配按字母顺序排序/
3 | 话
4 | 语言大师


非常感谢您的帮助。

-macspacejunkie


SELECT * from vocabulary 
WHERE translation like 'word'  
union all
SELECT * from vocabulary 
WHERE translation LIKE '%word%' and translation not like 'word'  

将首先列出完全匹配


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


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

所以像这样的东西应该工作。

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参考手册中找到。

链接地址: http://www.djcxy.com/p/75311.html

上一篇: How to sort MYSQL fulltext search results by relevancy

下一篇: How to get search results with accurate relevance