2010-06-15 151 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);