2

我有两张桌子。一种用于艺术家(artist_id、artist_name),一种用于曲目(track_id、artist_id、track_title)。

我希望能够处理诸如“better man Pearl jam”之类的查询,但我在思考这将如何工作的逻辑时遇到了麻烦。更好的人是曲目标题,而珍珠果酱是艺术家的名字。

我们目前正在使用 sphinx 来处理我们的搜索引擎(单独的艺术家和曲目)。

有没有一种有效的方法来解决这个问题?

4

1 回答 1

3

我认为,如果有人进行了匹配曲目和艺术家的搜索,他们正在寻找曲目。在这种情况下,您希望的行为是什么?

根据您的评论,您的 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";
}
于 2012-10-02T20:04:27.060 回答