Sphinxsearch sql_query有多个表

时间:2012-10-18 10:41:25

标签: mysql sql sphinx

我正在尝试以一种可以完全索引我的MySQL表的方式设置Sphinxsearch。如果我说得对,那么索引的所有内容都必须被sql_query抓取。可以使用每个查询,但我对如何将它应用于下表感到困惑。

CREATE TABLE books (
    book_id INT(10) PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(200),
    abstract TEXT
); 

CREATE TABLE authors (
    author_id INT(10) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(200)
);

CREATE TABLE book_author (
    book_author_id INT(10) PRIMARY KEY AUTO_INCREMENT,
    book_id INT(10),
    author_id INT(10)
);

现在我希望能够搜索类似Sphinx searching A. Aksyonoff的内容,并在作者和书籍表中进行搜索。但是我应该如何组合这些结果,并获得匹配的作者列表和匹配查询的书籍列表。还是有更好的方法?基本上,我需要在sql_query中填写什么以及我应该将其作为属性。

我尝试使用JOIN,但是当有多位作者时,我就​​失去了追踪。

2 个答案:

答案 0 :(得分:2)

单程

sql_query = SELECT book_id, title, abstract, \
              GROUP_CONCAT(author_id) AS author_ids, \
              GROUP_CONCAT(name SEPERATOR '. ') AS authors \
            FROM books \
              LEFT JOIN book_author USING (book_id) \
              LEFT JOIN authors USING (author_id) \
            GROUP BY book_id \
            ORDER BY NULL
sql_attr_multi = uint author_ids from query;

那会给你一个索引:

  1. 每本书一份文件 - 标题和摘要完全可搜索。

  2. authors字段中的作者列表 - 以便文本查询匹配。

  3. 您还有一个MVA属性author_ids,它会为您提供结果中作者的ID。

    要再次显示名称以进行显示,可以对数据库表使用这些ID(或者如果索引的大小允许使用字符串属性)。

    MVA也可用于在sphinx中进行分组 - 为您提供与特定文本查询匹配的作者的明细。

答案 1 :(得分:0)

希望这会对你有所帮助

选择标题,名称

来自书籍b

内部联接book_author g on g.book_id = b.book_id

内部联接在a.author_id = g.author_id

上创作
相关问题