2012-10-18 31 views
1

我想設置Sphinxsearch的方式,它可以完全索引我的MySQL表。如果我是對的,那麼所有被索引的東西都必須被sql_query抓住。每個查詢都可以使用,但我很困惑如何將其應用於下列表格。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,但是當有多個作者時,我就​​失去了蹤跡。

回答

1

單程

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也可以用於在獅身人面像中進行分組,以給出與特定文本查詢匹配的作者細目。

0

希望這將幫助你

選擇標題,名稱

從書本

b

內的加盟:BOOK_AUTHOR摹g.book_id = b.book_id

內連接上一個作家.author_id = g.author_id