我很难找到按照特定顺序排序我的MySQL FULLTEXT结果的方法。假设我有这些记录:
ID | Title
----+-----------------------------------
1 | Test test test truck from a test company.
2 | Test car from Germany.
3 | A car from London.
现在,如果我运行以下查询:
SELECT id, MATCH (title,keywords) AGAINST ('test car') AS score
FROM titles_tbl
WHERE MATCH (title,keywords) AGAINST ('test car')
ORDER BY score DESC
(注意:在我的应用程序中,我在两列,标题和关键字中使用FULLTEXT。在这个问题中,我只是查询一列作为示例。)
它会返回所有记录,但顺序让我感到困惑。我可以理解分数是什么,它来自哪里,但我想以不同的顺序。上面的查询将返回与此类似的结果:
ID | Title | Score
----+----------------------------------------------------+---------
1 | Test test test truck from a test company. | 1.5
2 | Test car from Germany. | 1.0
3 | A car from London. | 0.5
如果发现“测试”出现的次数多于第1行中的任何其他值,那么即使在该行中根本找不到“汽车”,它也会得分更重。我真的希望它在“测试”和“汽车”两个词的匹配时得分更重。因此,实际上,第2行“来自德国的试车”实际上应该排名更高,因为它包含两个单词,而2和3应该排名较低,因为它们不包含两个单词但是应该排序多少次被提到了。
因此,简而言之,我想从所有匹配的单词开始,以一个或多个匹配的单词结束,然后按实际提到的单词的次数排序,我的结果。
我如何实现这一目标?
答案 0 :(得分:1)
尝试IN BOOLEAN MODE:
mysql> select id, title, MATCH(title) against ('test car' in boolean mode) m
from titles_tbl
order by MATCH(title) against ('test car' in boolean mode) desc\G
*************************** 1. row ***************************
id: 2
title: Test car from Germany
m: 2
*************************** 2. row ***************************
id: 1
title: Test test test truck from a test company.
m: 1
*************************** 3. row ***************************
id: 3
title: A car from London
m: 1
3 rows in set (0.00 sec)
我在MySQL 5.5上测试了这个。如果IN BOOLEAN MODE未对搜索进行正确评分,请确保您运行的是最新版本。