mysql - 将全文搜索的分数相加 MATCH 在一起

标签 mysql select nlp

我有两个表:

表格页面:

|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 |

最佳答案

  1. 在您的结果集中添加一个GROUP BY title 语句,这样具有相同title 的记录将被聚合到一个组中。
  2. 调用 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/

相关文章:

php - WAMP 中的 SQL Server 而不是 MYSQL

mysql - 如果 count(*) 为 null 并且该计数的关联日期返回 0

javascript - rails : dynamic select on multistep form not keeping selected

mysql - 如何从表 A 中检索其 VARCHAR 列与另一个 VARCHAR 列部分匹配的行。在表B?

nlp - 在NLTK中选择哪个分类器

PHP/MySQL 代码不会将用户 ID 和密码插入表中

php - 尝试将两个数据库连接到一个 php 文件并存储用户 session

mysql选择数组中的数组

algorithm - Earley 无法处理图表中已包含的 epsilon 状态

python-3.x - 在word2vec中每次训练iter后如何获得向量?