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. 書籍ごとに 1 つのドキュメント - タイトルとアブストラクトは完全に検索可能です。

  2. フィールド内の著者のリストauthors- テキスト クエリが一致するようにします。

  3. author_idsまた、結果の著者の ID を提供する MVA 属性もあります。

    表示目的で名前を再度取得するには、データベース テーブルに対してこれらの ID を使用できます (または、インデックスのサイズが許す場合は、文字列属性を使用します)。

    MVA を使用して、sphinx でグループ化することもできます。これにより、特定のテキスト クエリに一致する著者の内訳を得ることができます。

于 2012-10-18T13:46:27.417 に答える
1

これがあなたを助けることを願っています

タイトル、名前を選択

本bから

内部結合 book_author g on g.book_id=b.book_id

内部結合の著者 a.author_id=g.author_id

于 2012-10-18T11:05:17.383 に答える