2011-07-08 27 views
1

我試圖製作一個可以通過多個方面搜索的產品數據庫(如newegg或亞馬遜)。起初我會試着用mysql來做所有的事情,但是進一步的研究讓我相信這是一個糟糕的主意,所以我正在考慮使用Sphinx。如何構建與sphinx一起使用的mysql數據庫?

我的問題是我將如何設置這個MySQL表?我是否只有一個產品表,另一個產品的所有方面都只有一些大的varchar字段和產品的外鍵?

+0

從缺乏反應判斷,也許我不應該使用獅身人面像? – Mike

回答

0

我不是一個巨大的獅身人面像專家,但我想說,你不必將所有的數據都粘在一張表中。獅身人面像可以很好地處理關聯。如果您打算爲您的前端使用Rails,請查看thinking_sphinx gem。它絕對允許您根據分散到許多表中的數據來指定屬性。根據我的經驗,我不必改變我的數據結構來適應斯芬克斯。

0

我會輸入。

你並不需要真正的。 Sphinx中的Facets只是ID(至少在當前穩定版本的0.9.9中)。我將假設你有一個標準的產品表,其中不同的方面存儲爲其他表的外鍵。

因此,假設你有這個,你可以選擇主要產品表並根據文檔設置獅身人面像的構面。

我真的需要看到你的表結構進一步評論。這聽起來像你有你的產品分佈在多個表。在這種情況下,正如你所提到的,我會選擇一個表格,並在其中填入所有其他內容。

0

關於Sphinx的好處是您可以使用MySQL查詢將您的數據導入Sphinx。這允許您以針對您的業務邏輯優化的方式構建數據庫,而無需擔心搜索如何執行。只要您對sql_query的查詢有創意,您可以根據需要對數據庫進行規範化處理,並且仍然可以抓取所有要用單個查詢編制索引的文本。例如,如果您需要將字符串從多對一關係中獲取到索引中,則可以使用子查詢來完成此操作。

sql_query = SELECT *, (SELECT pa.text FROM products_attr pa WHERE pa.product_id=p.id) \ 
       FROM products p; 

此外,如果你放棄,你的屬性ID搜索起伏,你用獅身人面像的multi-value attribute。這樣,您可以通過屬性ID以及屬性文本進行搜索。

sql_attr_multi = uint attributes from query; \ 
    SELECT product_id AS id, id AS attribute FROM product_attributes ; 
相關問題