0

私が見たスフィンクス検索の例では、実際には結合を使用していません。このようなスキーマがあった場合 (1 つの本に複数のレビューがあります)、

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 に与える必要がありますか。通常の内部結合を使用すると、各レビューは 1 つのドキュメントになり、サイトに表示される内容とは一致しません (1 つのページに書籍情報とすべてのレビューが含まれます)。

何を指示してるんですか?検索ドキュメント用の非正規化テーブルを作成し、レンダリングされたページを入力として使用する必要がありますか?

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

通常どおりレビューのインデックスを作成し、結果が返された後に mysql でレビュー ID から書籍 ID への結合を実行できます。

于 2009-11-16T13:41:31.717 に答える