我有两个表:
表格页面
:
|id |title |
+---+-----------+
|1 |Foxes |
|2 |Pet dogs |
表关键字
:
|id |page_id |phrase |
+---+--------+----------------------+
|1 |1 |quick brown fox jumps |
|2 |1 |lazy dog |
|3 |2 |caring for a dog |
|4 |2 |pet dog |
我目前正在使用这个查询:
SELECT pages.title, MATCH (phrase) AGAINST ('pet dog') as relevance
FROM pages
INNER JOIN keywords
ON pages.id = keywords.page_id
WHERE MATCH (phrase) AGAINST ('pet dog')
ORDER BY relevance DESC;
我得到了这个结果:
|title |relevance |
+------+---------------------+
|Dogs |0.3780859112739563 |
|Foxes |0.015609688125550747 |
|Dogs |0.015609688125550747 |
但我希望每个title
只有一个relevance
,所以每个短语的relevance
都适合每个title
应该像这样添加在一起:
|title |relevance |
+------+---------------------+
|dogs |0.3936955994 |
|foxes |0.015609688125550747 |
最佳答案
- 在您的结果集中添加一个
GROUP BY title
语句,这样具有相同title
的记录将被聚合到一个组中。 - 调用
SUM
函数以获得每个组的相关性
的总和。
所以,这个查询可能会帮到你:
SELECT title, SUM(relevance)
FROM
(
SELECT pages.title, MATCH (phrase) AGAINST ('pet dog') as relevance
FROM pages
INNER JOIN keywords
ON pages.id = keywords.page_id
WHERE MATCH (phrase) AGAINST ('pet dog')
ORDER BY relevance DESC
)
GROUP BY title;
关于mysql - 将全文搜索的分数相加 MATCH 在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582343/