0

我见过的狮身人面像搜索示例并没有真正使用连接。如果我有这样的模式(一本书有多个评论),

create table book ( id int auto_increment, title varchar(200), summary longtext );
create table reviews ( id int auto_increment, book_id int, review longtext );

我应该给 sphinx 什么样的查询,以便我可以搜索评论中的单词,它会返回相应的书。如果我使用常规的内部连接,则每个评论将是一个文档,并且与网站上可见的内容不对应(单页包含书籍信息和所有评论)。

你有什么建议?我是否应该为搜索文档创建一个非规范化表并使用呈现的页面作为输入,例如:

create table sphinx_input ( 
   id int, -- corresponds 1..1 to book.id
   contents longtext -- everything on the page
);

并针对书籍和评论的每次更改进行修改?

4

2 回答 2

2

您需要使用GROUP_CONCAT, 将所有评论数据收集到 Sphinx 的 sql_query 中的单个结果中。也许类似于以下内容:

SELECT books.id, books.title, books.summary,
  GROUP_CONCAT(reviews.review SEPARATOR ' ') AS reviews
FROM books LEFT OUTER JOIN reviews ON reviews.book_id = books.id
WHERE books.id >= $start AND books.id <= $end
GROUP BY books.id, books.title, books.summary

我建议使用外部连接,这样没有评论的书也会被退回。

于 2009-11-24T01:44:34.580 回答
1

你可以让它像往常一样索引评论,然后在结果返回后执行从评论 id 到 mysql 中的预订 id 的连接。

于 2009-11-16T13:41:31.717 回答