使用JOIN进行全文搜索

时间:2018-12-08 19:52:12

标签: mysql

与这一问题作斗争,研究了这里提出的其他类似问题,但解决方案不能满足我的需求。

简单地说,有两个表。 “艺术家”和“发行”,我想输入一个搜索字词,以找到与艺术家姓名和发行标题的最佳匹配。

艺术家有idartist。 版本包含idtitleartistId

artisttitle上有FULLTEXT索引

运行以下操作会产生artist列中存在Madonna的结果。

SELECT artists.*, releases.*, MATCH(artists.artist) AGAINST('Madonna') AS aScore
FROM artists
INNER JOIN releases ON releases.artistId = artists.id
WHERE MATCH(artists.artist) AGAINST('Madonna')

太好了。而且我可以将releases.title换成artists.artist,我会得到标题中带有麦当娜的发行的结果集。

但是,如果我将这两列都添加到MATCH中,则会出现Incorrect arguments to MATCH错误。

WHERE MATCH(artists.artist, releases.title) AGAINST('Madonna')

据我了解,列必须在同一张表中。

但是,当尝试两个MATCH子句时,将返回表中的每一行。 “艺术家”列都具有相同的分数-即使没有匹配,也就是仅使用艺术家MATCH时的分数,而标题分数是正确的,只有匹配的行才具有分数。

SELECT
    artists.artist,
    releases.title,
    MATCH(artists.artist) AGAINST('Madonna') AS aScore,
    MATCH(releases.title) AGAINST('Madonna') AS tScore
FROM artists
INNER JOIN releases ON releases.artistId = artists.id
WHERE MATCH(artists.artist) AGAINST('Madonna') OR MATCH(releases.title) AGAINST('Madonna')

0 个答案:

没有答案