1

我正在尝试以一种可以完全索引我的 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,但是当有多个作者时,我会迷失方向。

4

2 回答 2

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 中进行分组 - 为您提供与特定文本查询匹配的作者的细分。

于 2012-10-18T13:46:27.417 回答
1

希望对你有帮助

选择标题,姓名

来自书籍 b

在 g.book_id=b.book_id 上内部加入 book_author g

内部连接作者 a 在 a.author_id=g.author_id

于 2012-10-18T11:05:17.383 回答