我正在尝试以一种可以完全索引我的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,但是当有多位作者时,我就失去了追踪。
答案 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;
那会给你一个索引:
每本书一份文件 - 标题和摘要完全可搜索。
authors
字段中的作者列表 - 以便文本查询匹配。
您还有一个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
上创作