2013-05-31 168 views
0

問題:我需要對包含多行(一對多)的字段進行全文搜索。MySQL全文搜索一個是很多


我有這些模式:

公司(1500萬+++)

-id

-companyname


類別

-companyid

-categoryname(W /全文索引)


樣本數據:

公司

ID |公司名稱

1 |公司A

類別

companyid | categoryname

1 |銀行業務 1 |金融


目標: 我需要的是提供了「銀行業金融」的所有公司,但通過使用布爾模式和精確匹配。

下面的查詢將不會有,因爲「銀行」和「金融」的結果是在不同的行:

SELECT c.companyname FROM Company c 
INNER JOIN Categoy cat ON c.id = cat.companyid 
WHERE MATCH (categoryname) AGAINST ('+Banking +Finance' IN BOOLEAN MODE) 
LIMIT 100 


我的解決方案: 我重新調整了架構,我添加了一個新表命名爲「類別」,它具有來自「類別」(具有全文索引)的所有級聯類別,並且偏離了公司ID。這是工作,這是我能想到的最好/有效的方式。

我已經嘗試了不同的方法,如: - GROUP_CONCAT +像 - 聯盟+全文

我仍想知道是否有比我的解決方案更好的辦法?

回答

0

這可能工作。您可以使用having子句來計算每個單詞匹配的次數。它只會顯示每個單詞至少有一個匹配的單詞。

SELECT c.companyname 

FROM Company c 
     INNER JOIN Categoy cat ON c.id = cat.companyid 

GROUP BY c.id 

HAVING SUM(CASE WHEN MATCH (categoryname) AGAINST ('+Banking' IN BOOLEAN MODE) THEN 1 ELSE 0 END) > 1 
     AND 
     SUM(CASE WHEN MATCH (categoryname) AGAINST ('+Finance' IN BOOLEAN MODE) THEN 1 ELSE 0 END) > 1 

LIMIT 100 
+0

嗨,謝謝你的迴應。但是,我擁有1500萬+記錄/公司,這將非常緩慢。我的解決方案創建一個新的表w/csv類別比這更快。 – john