2010-06-15 210 views
0

可以說我有一個表與產品詳細信息。其中一個字段是類別(整數)。mysql全文搜索作爲level2索引

我想對特定類別的產品名稱進行全文搜索。

不幸的是,Mysql不允許我指定包含類別和產品名稱的索引作爲全文。它看起來像我只能在product_name上使用fulltext,並且在任何全文搜索之前都會搜索所有類別中的產品名稱。

有什麼辦法解決這個問題嗎(允許全文搜索/索引只針對產品類別)?

回答

1

這是不可能的,MyIsam中的全文搜索將每次掃描整個全文索引,但是通過向SQL查詢添加WHERE條件,可以過濾掉不屬於該類別的結果你想搜索。

0

從功能角度來看,您可以在產品名稱上進行全文搜索,並在where子句中按類別進行過濾。

select id,product_name 
from product_detail 
WHERE category = 17 
AND match(product_name) against('+foo*' IN BOOLEAN MODE); 

如果你想優化性能,您可以創建產品的名稱在每個類別中使用單獨的列或表一個單獨的全文索引。例如,您可以使用列名/表名稱product_name_cat1,product_name_cat2等。然後,您需要動態構建搜索查詢以根據類別使用適當的列/表。這會讓你的表現有所改善,因爲每個全文索引都小於包含所有類別的所有產品名稱的組合索引。

select id,product_name 
from product_detail 
WHERE category = 17 
AND match(product_name_cat17) against('+foo*' IN BOOLEAN MODE);