与这一问题作斗争,研究了这里提出的其他类似问题,但解决方案不能满足我的需求。
简单地说,有两个表。 “艺术家”和“发行”,我想输入一个搜索字词,以找到与艺术家姓名和发行标题的最佳匹配。
艺术家有id
,artist
。
版本包含id
,title
,artistId
artist
和title
上有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')