我有两张桌子。一种用于艺术家(artist_id、artist_name),一种用于曲目(track_id、artist_id、track_title)。
我希望能够处理诸如“better man Pearl jam”之类的查询,但我在思考这将如何工作的逻辑时遇到了麻烦。更好的人是曲目标题,而珍珠果酱是艺术家的名字。
我们目前正在使用 sphinx 来处理我们的搜索引擎(单独的艺术家和曲目)。
有没有一种有效的方法来解决这个问题?
我认为,如果有人进行了匹配曲目和艺术家的搜索,他们正在寻找曲目。在这种情况下,您希望的行为是什么?
根据您的评论,您的 sphinx 查询应如下所示:
SELECT track_id, track_title, artists.artist_id, artist_name FROM tracks
LEFT JOIN artists WHERE artists.artist_id = tracks.artist_id;
如果您使用的是 PHP,您的代码将类似于:
$res = $sc->Query($searchString, "SphinxIndexName");
if (isset($res['matches']) && sizeof($res['matches']) > 0) {
ids = join(",", array_keys($res["matches"]));
$query = "SELECT track_id, track_title, artists.artist_id, artist_name FROM tracks
LEFT JOIN artists WHERE artists.artist_id = tracks.artist_id ORDER BY FIELD(track_id, $ids)";
// ... query MySQL and display results
}
else {
echo "no results";
}