如何在多个匹配

时间:2017-03-03 17:15:13

标签: mysql sql full-text-search

我有以下全文索引:

FULLTEXT INDEX `title_short_description_description` (`title`, `short_description`, `description`)

当我运行以下查询时,我收到此错误:

  

无法找到与列列表匹配的FULLTEXT索引

select (
    (match (title) against ('abc' in boolean mode) * 100) +
    (match (short_description, description) against ('abc' in boolean mode))
) as score

from game_cache

where

    match (title) against ('abc' in boolean mode) or 
    match (short_description, description) against ('abc' in boolean mode)

order by score desc

我认为这是因为我没有在同一场比赛中使用所有三列,而是在两场比赛之间将它们分开。我试过分离索引,但MySQL并不允许这样做。

有什么方法可以让这个查询有效吗?

1 个答案:

答案 0 :(得分:2)

您需要为要使用MATCH查询的每个不同列集创建单独的索引。

为了运行您的示例查询,您需要再添加两个FULLTEXT索引(一次一个):

ALTER TABLE your_table
  ADD FULLTEXT INDEX `index_on_title` (`title`);

ALTER TABLE your_table
  ADD FULLTEXT INDEX `index_on_short_description_and_description` 
    (`short_description`, `description`);

如果您从未运行任何检查所有3列匹配的查询,那么您应该考虑删除现有的FULLTEXT索引:

ALTER TABLE your_table
  DROP INDEX `title_short_description_description`;