【问题标题】:searching two tables with sphinx and or mysql?用 sphinx 和或 mysql 搜索两个表?
【发布时间】:2012-10-02 19:58:49
【问题描述】:

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

我希望能够处理诸如“better man Pearl jam”之类的查询,但我无法思考其工作原理的逻辑。 Better man 是曲目名称,而 Pearl jam 是艺术家姓名。

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

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

【问题讨论】:

    标签: mysql sphinx


    【解决方案1】:

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

    根据您的评论,您的 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";
    }
    

    【讨论】:

    • 要做到这一点,请显示跟踪结果。只在艺术家是珍珠酱的地方展示更好的人。
    • 我想这也是我感到困惑的地方。我要达到哪个指数?曲目索引,艺术家索引或两者兼而有之?我是否正在创建一个新索引来处理这个问题?你的逻辑会反过来吗:珍珠果酱更好的人
    • 无论哪种方式,逻辑都会起作用。您的目标是根据关键字进行匹配,而不是关键字的顺序,而 sphinx 做得很好。在这种情况下,您的主要单位通常是曲目,并且您只会使用艺术家索引来执行诸如查找特定艺术家的曲目之类的事情。在此处发布您的 sphinx 配置以及您的代码以获得更多帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多